home *** CD-ROM | disk | FTP | other *** search
/ MacTech 1 to 12 / MacTech-vol-1-12.toast / Reference / the cmsp digests ('94-'97) / csmp digest Vol 3 No 040 < prev    next >
Internet Message Format  |  1997-05-06  |  136KB

  1. From: pottier@clipper.ens.fr (Francois Pottier)
  2. Subject: csmp-digest-v3-040
  3. Date: Tue, 28 Jun 1994 15:44:22 +0200 (MET DST)
  4.  
  5. C.S.M.P. Digest             Tue, 28 Jun 94       Volume 3 : Issue 40
  6.  
  7. Today's Topics:
  8.  
  9.         AppleScript Programmer's Dialect
  10.         BlockCompare?
  11.         GX Printing callbacks are C?
  12.         Handling Events during AE OpenDoc Processing
  13.         How to determine which Finder windows are open?
  14.         Metrowerks code generation wierdness
  15.         PPC and 64-bit video (was Re: Fast full screen scrolling: impossible?)
  16.         Playing QuickTime movies
  17.         Quickdraw GX - Why?
  18.         [Q] Programming the AT&T 3210?
  19.  
  20.  
  21.  
  22. The Comp.Sys.Mac.Programmer Digest is moderated by Francois Pottier
  23. (pottier@clipper.ens.fr).
  24.  
  25. The digest is a collection of article threads from the internet newsgroup
  26. comp.sys.mac.programmer.  It is designed for people who read c.s.m.p. semi-
  27. regularly and want an archive of the discussions.  If you don't know what a
  28. newsgroup is, you probably don't have access to it.  Ask your systems
  29. administrator(s) for details.  If you don't have access to news, you may
  30. still be able to post messages to the group by using a mail server like
  31. anon.penet.fi (mail help@anon.penet.fi for more information).
  32.  
  33. Each issue of the digest contains one or more sets of articles (called
  34. threads), with each set corresponding to a 'discussion' of a particular
  35. subject.  The articles are not edited; all articles included in this digest
  36. are in their original posted form (as received by our news server at
  37. nef.ens.fr).  Article threads are not added to the digest until the last
  38. article added to the thread is at least two weeks old (this is to ensure that
  39. the thread is dead before adding it to the digest).  Article threads that
  40. consist of only one message are generally not included in the digest.
  41.  
  42. The digest is officially distributed by two means, by email and ftp.
  43.  
  44. If you want to receive the digest by mail, send email to listserv@ens.fr
  45. with no subject and one of the following commands as body:
  46.     help                        Sends you a summary of commands
  47.     subscribe csmp-digest Your Name    Adds you to the mailing list
  48.     signoff csmp-digest            Removes you from the list
  49. Once you have subscribed, you will automatically receive each new
  50. issue as it is created.
  51.  
  52. The official ftp info is //ftp.dartmouth.edu/pub/csmp-digest.
  53. Questions related to the ftp site should be directed to
  54. scott.silver@dartmouth.edu. Currently no previous volumes of the CSMP
  55. digest are available there.
  56.  
  57. Also, the digests are available to WAIS users.  To search back issues
  58. with WAIS, use comp.sys.mac.programmer.src. With Mosaic, use
  59. http://www.wais.com/wais-dbs/comp.sys.mac.programmer.html.
  60.  
  61.  
  62. -------------------------------------------------------
  63.  
  64. >From hall_j@sat.mot.com (Joseph Hall)
  65. Subject: AppleScript Programmer's Dialect
  66. Date: Fri, 3 Jun 1994 22:28:40 GMT
  67. Organization: Motorola Inc., Satellite Communications
  68.  
  69. Is the programmer's dialect real, or just a figment of the Language Guide's
  70. imagination?
  71.  
  72. -- 
  73. Joseph Nathan Hall | Joseph's Law of Interface Design: Never give your users
  74. Software Architect | a choice between the easy way and the right way.
  75. Gorca Systems Inc. |                 joseph@joebloe.maple-shade.nj.us (home)
  76. (on assignment)    | (602) 732-2549 (work)  Joseph_Hall-SC052C@email.mot.com
  77.  
  78. +++++++++++++++++++++++++++
  79.  
  80. >From mwalker@netcom.com (Mel Walker)
  81. Date: Mon, 6 Jun 1994 16:02:46 GMT
  82. Organization: Committee to Elect Dan Quayle Lord of the Cosmos
  83.  
  84. Joseph Hall (hall_j@sat.mot.com) wrote:
  85. : Is the programmer's dialect real, or just a figment of the Language Guide's
  86. : imagination?
  87.  
  88. Also, are instructions for making dialects published anywhere? Probably 
  89. not, right?
  90. -- 
  91. Mel Walker                                     mwalker@netcom.com
  92. "That is one of the unwritten rules of government bureaucracy:
  93. Doing something idiotic is not advisable; getting caught doing
  94. something idiotic is a disaster." - Mike Royko
  95.  
  96. +++++++++++++++++++++++++++
  97.  
  98. >From minshull.m@applelink.apple.com (Mark Minshull)
  99. Date: Mon, 6 Jun 1994 17:55:42 GMT
  100. Organization: Apple Computer, Inc.
  101.  
  102. In article <1994Jun3.222840.606@sat.mot.com>, hall_j@sat.mot.com (Joseph
  103. Hall) wrote:
  104.  
  105. > Is the programmer's dialect real, or just a figment of the Language Guide's
  106. > imagination?
  107. At this point, it's a still-born project...
  108.  
  109.   Mark
  110. -- 
  111. Mark Minshull                       :       minshull.m@applelink.apple.com
  112. OpenDoc Engineering Manager         :          
  113. Apple Computer, Inc.                :       Apple usually doesn't care 
  114. 1 Infinite Loop, MS 303-3A          :       what I say... When they do
  115. Cupertino, CA  95014                :       my opinions are my own.
  116.  
  117. +++++++++++++++++++++++++++
  118.  
  119. >From minshull.m@applelink.apple.com (Mark Minshull)
  120. Date: Mon, 6 Jun 1994 17:58:00 GMT
  121. Organization: Apple Computer, Inc.
  122.  
  123. In article <mwalkerCqzGKn.B82@netcom.com>, mwalker@netcom.com (Mel Walker)
  124. wrote:
  125.  
  126. > Also, are instructions for making dialects published anywhere? Probably 
  127. > not, right?
  128.  
  129. Right.  The interface is private...
  130.  
  131. -- 
  132. Mark Minshull                       :       minshull.m@applelink.apple.com
  133. OpenDoc Engineering Manager         :          
  134. Apple Computer, Inc.                :       Apple usually doesn't care 
  135. 1 Infinite Loop, MS 303-3A          :       what I say... When they do
  136. Cupertino, CA  95014                :       my opinions are my own.
  137.  
  138. +++++++++++++++++++++++++++
  139.  
  140. >From Jens Alfke <jens_alfke@powertalk.apple.com>
  141. Date: Mon, 6 Jun 1994 20:05:00 GMT
  142. Organization: Apple Computer
  143.  
  144. Joseph Hall, hall_j@sat.mot.com writes:
  145. > Is the programmer's dialect real, or just a figment of the Language Guide's
  146. > imagination?
  147.  
  148. Sue Dumont of the AppleScript team wrote one, but there aren't any plans I
  149. know of to ship it. It's pretty cool, but it needs some work before it's
  150. ready for prime time.
  151.  
  152. --Jens Alfke
  153.   jens_alfke@powertalk              Rebel girl, rebel girl,
  154.             .apple.com              Rebel girl you are the queen of my world
  155.  
  156. +++++++++++++++++++++++++++
  157.  
  158. >From Jens Alfke <jens_alfke@powertalk.apple.com>
  159. Date: Mon, 6 Jun 1994 22:52:01 GMT
  160. Organization: Apple Computer
  161.  
  162. Mel Walker, mwalker@netcom.com writes:
  163. > Also, are instructions for making dialects published anywhere? Probably 
  164. > not, right?
  165.  
  166. Making dialects (a) is pretty complicated and (b) requires more access to the
  167. internals of the AppleScript engine than Apple wants to give 3rd parties. A
  168. large part of it involves writing yacc syntax descriptions whose tables then
  169. get dumped into the dialect file.
  170.  
  171. --Jens Alfke
  172.   jens_alfke@powertalk              Rebel girl, rebel girl,
  173.             .apple.com              Rebel girl you are the queen of my world
  174.  
  175. +++++++++++++++++++++++++++
  176.  
  177. >From mwalker@netcom.com (Mel Walker)
  178. Date: Tue, 7 Jun 1994 17:07:02 GMT
  179. Organization: Committee to Elect Dan Quayle Lord of the Cosmos
  180.  
  181. Jens Alfke (jens_alfke@powertalk.apple.com) wrote:
  182. : Mel Walker, mwalker@netcom.com writes:
  183. : > Also, are instructions for making dialects published anywhere? Probably 
  184. : > not, right?
  185.  
  186. : Making dialects (a) is pretty complicated and (b) requires more access to the
  187. : internals of the AppleScript engine than Apple wants to give 3rd parties. A
  188. : large part of it involves writing yacc syntax descriptions whose tables then
  189. : get dumped into the dialect file.
  190.  
  191. I assume that I could write a scripting component that opened up the
  192. AppleScript component, and translate my "dialect" into AppleScript that
  193. way. Is there anything that would prevent that?
  194.  
  195. -- 
  196. Mel Walker                                     mwalker@netcom.com
  197. "That is one of the unwritten rules of government bureaucracy:
  198. Doing something idiotic is not advisable; getting caught doing
  199. something idiotic is a disaster." - Mike Royko
  200.  
  201. +++++++++++++++++++++++++++
  202.  
  203. >From Jens Alfke <jens_alfke@powertalk.apple.com>
  204. Date: Tue, 7 Jun 1994 22:04:44 GMT
  205. Organization: Apple Computer
  206.  
  207. Mel Walker, mwalker@netcom.com writes:
  208. > I assume that I could write a scripting component that opened up the
  209. > AppleScript component, and translate my "dialect" into AppleScript that
  210. > way. Is there anything that would prevent that?
  211.  
  212. That'd work; your component would just forward all of its calls to
  213. AppleScript. The compile and getsource calls would have to do some
  214. transformation on the source text to change it from/to your syntax to/from
  215. AppleScript. (Don't forget the getsource call or people won't be able to
  216. re-edit compiled scripts!) And also don't forget to fix up the source
  217. positions in the error descriptor when the client wants to know the source
  218. range of the error.
  219.  
  220.  Of course this would only work with one dialect of AppleScript.
  221.  
  222. --Jens Alfke
  223.   jens_alfke@powertalk              Rebel girl, rebel girl,
  224.             .apple.com              Rebel girl you are the queen of my world
  225.  
  226. +++++++++++++++++++++++++++
  227.  
  228. >From d88-jwa@dront.nada.kth.se (Jon Wätte)
  229. Date: 9 Jun 1994 08:55:24 GMT
  230. Organization: The Royal Institute of Technology
  231.  
  232. In <minshull.m-060694105800@minshullmac.apple.com> minshull.m@applelink.apple.com (Mark Minshull) writes:
  233.  
  234. >In article <mwalkerCqzGKn.B82@netcom.com>, mwalker@netcom.com (Mel Walker)
  235. >wrote:
  236.  
  237. >> Also, are instructions for making dialects published anywhere? Probably 
  238. >> not, right?
  239.  
  240. >Right.  The interface is private...
  241.  
  242. How come there's a tickle dialect of the OSA then?
  243.  
  244. Cheers,
  245.  
  246.     
  247.                     / h+
  248. -- 
  249.  -- Jon W{tte, h+@nada.kth.se, Mac Software Engineer Deluxe --
  250.  
  251.  -- I don't fear death, it's dying that scares me.
  252.  
  253. +++++++++++++++++++++++++++
  254.  
  255. >From Jens Alfke <jens_alfke@powertalk.apple.com>
  256. Date: Thu, 9 Jun 1994 18:29:45 GMT
  257. Organization: Apple Computer
  258.  
  259. Jon W!tte, d88-jwa@dront.nada.kth.se writes:
  260. > How come there's a tickle dialect of the OSA then?
  261.  
  262. That's not an AppleScript dialect, it's an entirely separate OSA component,
  263. like Frontier or QuicKeyScript. The difference is that a dialect is just a
  264. plug-in parser (and unparser) for the AppleScript compiler, whereas a
  265. scripting component is entirely independent of AppleScript. To write a new
  266. scripting component you just have to follow the OSA API, whereas dialects are
  267. pretty tightly coupled to AppleScript's internal parsing engine and build
  268. system.
  269.  
  270. --Jens Alfke
  271.   jens_alfke@powertalk              Rebel girl, rebel girl,
  272.             .apple.com              Rebel girl you are the queen of my world
  273.  
  274. +++++++++++++++++++++++++++
  275.  
  276. >From mwalker@netcom.com (Mel Walker)
  277. Date: Thu, 9 Jun 1994 21:57:58 GMT
  278. Organization: Committee to Elect Dan Quayle Lord of the Cosmos
  279.  
  280. Jon Wätte (d88-jwa@dront.nada.kth.se) wrote:
  281. : In <minshull.m-060694105800@minshullmac.apple.com> minshull.m@applelink.apple.com (Mark Minshull) writes:
  282.  
  283. : >In article <mwalkerCqzGKn.B82@netcom.com>, mwalker@netcom.com (Mel Walker)
  284. : >wrote:
  285.  
  286. : >> Also, are instructions for making dialects published anywhere? Probably 
  287. : >> not, right?
  288.  
  289. : >Right.  The interface is private...
  290.  
  291. : How come there's a tickle dialect of the OSA then?
  292.  
  293. There's not. AppleScript is one OSA _language_ with several _dialects_.
  294.  
  295. Quickeys, tickle, etc. store their internal scripts in a different form
  296. than AppleScript does, so their scripts are not compatible. If you
  297. program AppleScript in the English dialect, and select the French
  298. dialect, the script will change to reflect that without changing
  299. the underlying tokenized form.
  300.  
  301. Did I get that right, O Great Gurus from Apple?
  302. -- 
  303. Mel Walker                                     mwalker@netcom.com
  304. "That is one of the unwritten rules of government bureaucracy:
  305. Doing something idiotic is not advisable; getting caught doing
  306. something idiotic is a disaster." - Mike Royko
  307.  
  308. +++++++++++++++++++++++++++
  309.  
  310. >From quinn@cs.uwa.edu.au (Quinn "The Eskimo!")
  311. Date: Fri, 10 Jun 1994 10:03:12 +0800
  312. Organization: Department of Computer Science, The University of Western Australia
  313.  
  314. In article <2t6lds$o2k@news.kth.se>, d88-jwa@dront.nada.kth.se (Jon Wätte)
  315. wrote:
  316.  
  317. >In <minshull.m-060694105800@minshullmac.apple.com>
  318. minshull.m@applelink.apple.com (Mark Minshull) writes:
  319. >
  320. >>In article <mwalkerCqzGKn.B82@netcom.com>, mwalker@netcom.com (Mel Walker)
  321. >>wrote:
  322. >
  323. >>> Also, are instructions for making dialects published anywhere? Probably 
  324. >>> not, right?
  325. >
  326. >>Right.  The interface is private...
  327. >
  328. >How come there's a tickle dialect of the OSA then?
  329.  
  330. You're confusing your dialects with your OSA scripting components.  A
  331. dialect is a different natural language (or syntax in the case of the
  332. Programmer's Dialect) for *AppleScript*.  An OSA scripting component lets
  333. you implement an entirely different programming language within the
  334. framework of the OSA.
  335.  
  336. So AppleScript currently has 3 dialects (English, French, Japanese) which
  337. all compile to the same language (AppleScript).  There are also buckets of
  338. other OSA scripting components (QuickKeys, TCL, etc).
  339. -- 
  340. Quinn "The Eskimo!"      <quinn@cs.uwa.edu.au>     "Support HAVOC!"
  341. Department of Computer Science, The University of Western Australia
  342.   The cute thing is that you can compile a script in one dialect and
  343.   then decompile it in another.  If only it translated the identifiers.
  344.   Such a shame the Translation Manager doesn't live up to its name (:
  345.  
  346. +++++++++++++++++++++++++++
  347.  
  348. >From msouth@BIX.com (msouth on BIX)
  349. Date: 14 Jun 94 05:31:10 GMT
  350. Organization: Delphi Internet Services Corporation
  351.  
  352. mwalker@netcom.com (Mel Walker) writes:
  353.  
  354. >Quickeys, tickle, etc. store their internal scripts in a different form
  355. >than AppleScript does, so their scripts are not compatible. If you
  356. >program AppleScript in the English dialect, and select the French
  357. >dialect, the script will change to reflect that without changing
  358. >the underlying tokenized form.
  359.  
  360. You know, this is a _perfect_ example of how the Mac is head
  361. and shoulders above anything else. But do you think that anyone
  362. other than a already-dedicated Mac programmer knows about it?
  363. Why on earth doesn't Apple _advertise_ some of this stuff?
  364.  
  365. +++++++++++++++++++++++++++
  366.  
  367. >From 103t_english@west.cscwc.pima.edu
  368. Date: 14 Jun 94 12:45:21 MST
  369. Organization: (none)
  370.  
  371. In article <msouth.771571870@BIX.com>, msouth@BIX.com (msouth on BIX) writes:
  372. > mwalker@netcom.com (Mel Walker) writes:
  373. >>Quickeys, tickle, etc. store their internal scripts in a different form
  374. >>than AppleScript does, so their scripts are not compatible. If you
  375. >>program AppleScript in the English dialect, and select the French
  376. >>dialect, the script will change to reflect that without changing
  377. >>the underlying tokenized form.
  378. > You know, this is a _perfect_ example of how the Mac is head
  379. > and shoulders above anything else. But do you think that anyone
  380. > other than a already-dedicated Mac programmer knows about it?
  381. > Why on earth doesn't Apple _advertise_ some of this stuff?
  382.  
  383. I tell DOS-bigots all the time and their response is: "whoopee! Who would ever
  384. need to do something like that...
  385.  
  386. Oh well.
  387.  
  388.  
  389. Lawson
  390.  
  391. ---------------------------
  392.  
  393. >From spencerl@crl.com (Spencer Low)
  394. Subject: BlockCompare?
  395. Date: 12 Jun 1994 14:44:31 -0700
  396. Organization: LowTek Creations
  397.  
  398. I'm looking for some sample code (preferably in C) that will compare to 
  399. blocks of memory. In other words:
  400.  
  401.    Boolean BlockCompare(Ptr block1, Ptr block2, Size byteCount);
  402.  
  403. The C libraries that come with THINK C include memcmp, but it's 
  404. hand-coded in 68K assembly. I'd prefer something less platform dependent, 
  405. yet still quick.
  406.  
  407. Thanks,
  408. Spencer (btw, I didn't see anything like this at the alt.sources.mac 
  409. archives)
  410. -- 
  411.   Spencer Low       | MaxRAM: Compatible with RD 1.0.1 and 1.0.2,
  412.   LowTek Creations  |         but not yet with RD 1.0.3A.
  413.   spencerl@crl.com  | ftp://crl.com/users/ro/spencerl/
  414.  
  415. +++++++++++++++++++++++++++
  416.  
  417. >From rang@winternet.com (Anton Rang)
  418. Date: 13 Jun 1994 01:32:50 GMT
  419. Organization: Minnesota Angsters
  420.  
  421. In article <2tfvjv$8se@crl2.crl.com> spencerl@crl.com (Spencer Low) writes:
  422. >I'm looking for some sample code (preferably in C) that will compare to 
  423. >blocks of memory. In other words:
  424. >
  425. >   Boolean BlockCompare(Ptr block1, Ptr block2, Size byteCount);
  426. >
  427. >The C libraries that come with THINK C include memcmp, but it's 
  428. >hand-coded in 68K assembly. I'd prefer something less platform dependent, 
  429. >yet still quick.
  430.  
  431.   Just to see if they're equal?
  432.  
  433.   You probably can't beat a loop like this, in C, without adding
  434. various platform dependent tricks:
  435.  
  436.     while (byteCount--)
  437.       if (*block1++ != *block2++)
  438.         return (false);
  439.  
  440.     return (true);
  441.  
  442. If you're using 68K assembly, you can do very well using 'cmpm' and a
  443. 'dbra' variant, if your loop counts will fit in a two-byte variable.
  444. Something along the lines of
  445.  
  446.     @0:    cmpm.l    (a0)+, (a1)+        ; or .b if you really need byte-by-byte
  447.     dbne    @0            ; branch until not-equal
  448.     seq    d0            ; set d0 to be non-zero if they match
  449.     rts                ; return
  450.  
  451. Using memcmp() is your best bet for a platform-independent quick way,
  452. since it's part of the ANSI standard and probably coded in assembly.
  453. --
  454. Anton Rang (rang@winternet.com)
  455.  
  456. +++++++++++++++++++++++++++
  457.  
  458. >From bwade@graphics.cornell.edu (Bretton Wade)
  459. Date: 13 Jun 1994 04:14:26 GMT
  460. Organization: Program of Computer Graphics -- Cornell University
  461.  
  462. probably your best bet if you want to do it in a high level language is to
  463. make a nice unrolled loop. you'd have to know in general that the size of the
  464. block you want to compare is divisible by some factor (say 16)..
  465.  
  466. Boolean    compare (long *a, long *b, long blocksize)
  467. {
  468.     for (short i = 0; i < blocksize; i += 16)
  469.     {
  470.         if (*a++ != *b++) return FALSE;
  471.         if (*a++ != *b++) return FALSE;
  472.         if (*a++ != *b++) return FALSE;
  473.         if (*a++ != *b++) return FALSE;
  474.     }
  475.     return TRUE;
  476. }
  477.  
  478. the more compares you can do inside the loop, the better off you'll be (up to a
  479. point). You may also need a little code that will check any leftover that you
  480. couldn't cover with the big blocks. say you've got 64001 bytes to compare. You
  481. would check the first 64000 with a big block checker, then test the last byte
  482. separately.
  483.  
  484. THINK's memcmp function checks one byte at a time. you should be able to blast
  485. that with C code quite easily...
  486. -- 
  487. _______________________________________________________________________________
  488.  
  489.    Bretton Wade (bw16@cornell.edu)
  490.  
  491.    Program of Computer Graphics
  492.    580 Engineering and Theory Center
  493.    Cornell University
  494.    Ithaca, NY 14853
  495.    Voice: (607) 255-6704
  496.    Fax:   (607) 255-0806
  497. _______________________________________________________________________________
  498.  
  499. +++++++++++++++++++++++++++
  500.  
  501. >From Jens Alfke <jens_alfke@powertalk.apple.com>
  502. Date: Mon, 13 Jun 1994 20:11:26 GMT
  503. Organization: Apple Computer
  504.  
  505. Spencer Low, spencerl@crl.com writes:
  506. > The C libraries that come with THINK C include memcmp, but it's 
  507. > hand-coded in 68K assembly. I'd prefer something less platform dependent, 
  508. > yet still quick.
  509.  
  510. If you want portability, use memcmp. You can't get much more portable than
  511. the ANSI library -- any C implementation you use, anywhere, is guaranteed to
  512. have one.
  513.  
  514. --Jens Alfke
  515.   jens_alfke@powertalk              Rebel girl, rebel girl,
  516.             .apple.com              Rebel girl you are the queen of my world
  517.  
  518. ---------------------------
  519.  
  520. >From Jens Alfke <jens_alfke@powertalk.apple.com>
  521. Subject: GX Printing callbacks are C?
  522. Date: Thu, 9 Jun 1994 18:02:49 GMT
  523. Organization: Apple Computer
  524.  
  525. Looks like the entire GX team is on vacation this week, unless they're just
  526. refusing to return my calls, so I'll have to make like a layperson and ask
  527. the net...  ;-)
  528.  
  529. I'm adding GX print manager support to a QD-based app of mine (well, Sticky
  530. Memos, but this feature won't be in 1.0.) I'm following the prerelease
  531. 'develop' article.
  532.  
  533. I note that the various callbacks you need to install (event filtering and
  534. shape spooling) are not declared as 'pascal' functions. This strikes me as
  535. odd since (as has been discussed recently) there are no standard C calling
  536. conventions on the Mac and the three major C compilers all do things
  537. differently.
  538.  
  539. Is this going to be a problem for me? My app's written in CodeWarrior. The
  540. major thing I remember is that MPW passes all parameters of any size as
  541. longs, so I may have to make sure that any short or Boolean params are
  542. declared in my callback functions as longs. Is there anything else I need to
  543. do (besides declaring the functions as extern "C", of course)?
  544.  
  545. And what do Pascal users do about this? I've heard that MPW Pascal can use C
  546. calling conventions, but what about THINK Pascal? At the risk of not sounding
  547. like a team player, I have to say that this C-callbacks thing in GX may not
  548. have been the most well thought out idea in the world.
  549.  
  550. --Jens Alfke
  551.   jens_alfke@powertalk              Rebel girl, rebel girl,
  552.             .apple.com              Rebel girl you are the queen of my world
  553.  
  554. +++++++++++++++++++++++++++
  555.  
  556. >From quinn@cs.uwa.edu.au (Quinn "The Eskimo!")
  557. Date: Fri, 10 Jun 1994 10:30:53 +0800
  558. Organization: Department of Computer Science, The University of Western Australia
  559.  
  560. In article <1994Jun9.180249.25884@gallant.apple.com>, Jens Alfke
  561. <jens_alfke@powertalk.apple.com> wrote:
  562.  
  563. >I note that the various callbacks you need to install (event filtering and
  564. >shape spooling) are not declared as 'pascal' functions. This strikes me as
  565. >odd since (as has been discussed recently) there are no standard C calling
  566. >conventions on the Mac and the three major C compilers all do things
  567. >differently.
  568. >
  569. >Is this going to be a problem for me? My app's written in CodeWarrior. The
  570. >major thing I remember is that MPW passes all parameters of any size as
  571. >longs, so I may have to make sure that any short or Boolean params are
  572. >declared in my callback functions as longs. Is there anything else I need to
  573. >do (besides declaring the functions as extern "C", of course)?
  574.  
  575. The situation is like this...
  576.  
  577. MPW and CodeWarrior Pascal can both call external functions written in C. 
  578. You simply declare the function header and take a "C;" after it, with an
  579. optional "EXTERNAL;" after that.  Think cannot do this and it sucks big
  580. time.
  581.  
  582. *None* of the Pascal compilers can compile a function written in Pascal
  583. that uses C calling conventions.  So if you want to do C calling
  584. convention callbacks you are basically stuffed.
  585.  
  586. My workaround to this is to write the necessary glue in C, where all the
  587. compilers support all the calling conventions.  Peter Lewis (who uses
  588. Think Pascal exclusively) works around this by declaring the functions
  589. with no parameters, getting the value of the A6 register and then walking
  590. up the stack manually.  It's yucky, it's non-portable, it works.
  591.  
  592. btw It's not just a question of making the parameters match in size.  The
  593. problem is that C requires the callee to remove the parameters and Pascal
  594. (normally) has the caller removing them.  So you have to declare the
  595. function with *no* parameters to avoid big dramas with the stack.  Oh yeah
  596. and returning stuff in D0 is kinda hard too.
  597.  
  598. I haven't actually looked through GX yet but if it's full of C callbacks
  599. then I'm gonna be *extremely* depressed.
  600.  
  601. >And what do Pascal users do about this? I've heard that MPW Pascal can use C
  602. >calling conventions, but what about THINK Pascal? At the risk of not sounding
  603. >like a team player, I have to say that this C-callbacks thing in GX may not
  604. >have been the most well thought out idea in the world.
  605.  
  606. Well we get bitter and twisted and wear "C, Stop It or You'll Go Blind!"
  607. T-shirts around WWDC and harrass the guys doing the interfaces about using
  608. a decent IDL so that we can generate Pascal interfaces (and, if necessary,
  609. glue code) automatically.  The depressing thing is that (I think) we've
  610. got a lot of sympathy but there's this little thing called "economic
  611. imperative" that ensures that no one does anything to help.  *sigh*
  612.  
  613. One nice thing is that the PPC has One True Calling Convention (tm). 
  614. Hopefully this will improve matters.
  615.  
  616. Share and Enjoy.
  617. -- 
  618. Quinn "The Eskimo!"      <quinn@cs.uwa.edu.au>     "Support HAVOC!"
  619. Department of Computer Science, The University of Western Australia
  620.   Maintain the Rage!!!
  621.  
  622. +++++++++++++++++++++++++++
  623.  
  624. >From resnick@uiuc.edu (Pete Resnick)
  625. Date: Thu, 09 Jun 1994 22:09:47 -0500
  626. Organization: University of Illinois at Urbana-Champaign
  627.  
  628. In article <quinn-1006941030530001@eriodon.cs.uwa.oz.au>,
  629. quinn@cs.uwa.edu.au (Quinn "The Eskimo!") wrote:
  630.  
  631. >btw It's not just a question of making the parameters match in size.  The
  632. >problem is that C requires the callee to remove the parameters and Pascal
  633. >(normally) has the caller removing them.
  634.  
  635. You got that backwards. The caller resets the stack in *C* and the callee
  636. removes them in Pascal.
  637.  
  638. pr
  639. -- 
  640. Pete Resnick        (...so what is a mojo, and why would one be rising?)
  641. Doctoral Student - Philosophy Department, Gregory Hall, UIUC
  642. System manager - Cognitive Science Group, Beckman Institute, UIUC
  643. Internet: resnick@uiuc.edu
  644.  
  645. +++++++++++++++++++++++++++
  646.  
  647. >From Jens Alfke <jens_alfke@powertalk.apple.com>
  648. Date: Fri, 10 Jun 1994 21:11:41 GMT
  649. Organization: Apple Computer
  650.  
  651. In article <quinn-1006941030530001@eriodon.cs.uwa.oz.au> Quinn,
  652. quinn@cs.uwa.edu.au writes:
  653. > MPW and CodeWarrior Pascal can both call external functions written in C. 
  654.  
  655. Pascal access is certainly an issue, but not the one that immediately
  656. concerns me since I'm writing in C++. The problem is that GX presumably calls
  657. my callbacks with MPW calling conventions*, whereas my functions are
  658. implemented using CodeWarrior conventions. As has been discussed in the
  659. context of linking with .o files, the two are different and you have to be
  660. careful about what size the params are and what register the results get
  661. returned in.
  662.  
  663. *Actually that's not even certain since I know that at least the graphics
  664. engine of GX was developed in THINK C. I'm guessing that for the real builds
  665. they compiled it with MPW, given the MPW-bigotry inside Apple... ;-)
  666.  
  667. --Jens Alfke
  668.   jens_alfke@powertalk              Rebel girl, rebel girl,
  669.             .apple.com              Rebel girl you are the queen of my world
  670.  
  671. +++++++++++++++++++++++++++
  672.  
  673. >From mclow@coyote.csusm.edu (Marshall Clow)
  674. Date: 10 Jun 1994 21:48:39 -0700
  675. Organization: California State University San Marcos
  676.  
  677. Jens Alfke (jens_alfke@powertalk.apple.com) wrote:
  678. >In article <quinn-1006941030530001@eriodon.cs.uwa.oz.au> Quinn,
  679. >quinn@cs.uwa.edu.au writes:
  680. >> MPW and CodeWarrior Pascal can both call external functions written in C. 
  681.  
  682. >Pascal access is certainly an issue, but not the one that immediately
  683. >concerns me since I'm writing in C++. The problem is that GX presumably calls
  684. >my callbacks with MPW calling conventions*, whereas my functions are
  685. >implemented using CodeWarrior conventions. As has been discussed in the
  686. >context of linking with .o files, the two are different and you have to be
  687. >careful about what size the params are and what register the results get
  688. >returned in.
  689.  
  690.     Starting with GM (dontcha just love it? ;-) the GX header files
  691. contain a "#ifdef applec" section that defines the calls for the MPW C
  692. compiler, and an '#else' section that works for MetroWerks and Think C.
  693. The files affected are PrintingDrivers.h and PrintingMessages.h (I think).
  694.  
  695.     Several of the GX libraries contain "non pascal" routines with
  696. short parameters, but since source to the libs is provided, these interfaces
  697. were not changed.
  698.  
  699. Marshall Clow
  700. Amateur GX Weenie
  701. Aladdin Systems
  702. mclow@san_marcos.csusm.edu
  703. [ Apparently the first person to write a GX printer driver in Think C.]
  704.  
  705.  
  706. +++++++++++++++++++++++++++
  707.  
  708. >From ldo@waikato.ac.nz (Lawrence D'Oliveiro, Waikato University)
  709. Date: 13 Jun 94 18:03:18 +1200
  710. Organization: University of Waikato, Hamilton, New Zealand
  711.  
  712. In article <quinn-1006941030530001@eriodon.cs.uwa.oz.au>, quinn@cs.uwa.edu.au (Quinn "The Eskimo!") writes:
  713. > In article <1994Jun9.180249.25884@gallant.apple.com>, Jens Alfke
  714. > <jens_alfke@powertalk.apple.com> wrote:
  715. >
  716. >>I note that the various callbacks you need to install (event filtering and
  717. >>shape spooling) are not declared as 'pascal' functions.
  718. >>
  719. >>Is this going to be a problem for me? My app's written in CodeWarrior. The
  720. >>major thing I remember is that MPW passes all parameters of any size as
  721. >>longs, so I may have to make sure that any short or Boolean params are
  722. >>declared in my callback functions as longs. Is there anything else I need to
  723. >>do (besides declaring the functions as extern "C", of course)?
  724. >
  725. > *None* of the Pascal compilers can compile a function written in Pascal
  726. > that uses C calling conventions.  So if you want to do C calling
  727. > convention callbacks you are basically stuffed.
  728. >
  729. > My workaround to this is to write the necessary glue in C, where all the
  730. > compilers support all the calling conventions.  Peter Lewis (who uses
  731. > Think Pascal exclusively) works around this by declaring the functions
  732. > with no parameters, getting the value of the A6 register and then walking
  733. > up the stack manually.  It's yucky, it's non-portable, it works.
  734.  
  735. My workaround is a generic piece of assembly-language glue which looks
  736. something like this:
  737.  
  738.     clr.w    -(sp)    ; room for Pascal function result
  739.     pea    6(sp)    ; pointer to C-format argument list
  740.     jsr    PascalRoutine ; call my Pascal-conforming routine
  741.     move.w    (sp)+, d0 ; return Pascal result to C
  742.     rts
  743.  
  744. The Pascal-conforming routine (in Modula-2, in my case) is declared like this:
  745.  
  746.     PROCEDURE MyHandler
  747.       (
  748.         VAR Args : ArgsForThisRoutine
  749.       ) : OSErr;
  750.  
  751. where "ArgsForThisRoutine" is a record type that mimics the format of the
  752. C argument list. So I refer to the arguments as "Args.whatever". Not too
  753. painful at all.
  754.  
  755. One common case is printing extensions and drivers. This introduces its own
  756. fiddly bits, in that the offsets in the 'over' resources must match the entry
  757. points in your 'pext' code resources. To solve all this, I wrote a custom MPW
  758. tool which takes a file of entry point definitions, and generates .o files for
  759. the segment headers (including the C-to-Pascal glue, above), and the 'over'
  760. resources, all in one fell swoop, so you never have to worry about keeping
  761. them consistent again. Nifty, huh?
  762.  
  763. Lawrence "Just call me the 'Speedbump, the Roadkill Hedgehog' of the
  764. Information Superhighway" D'Oliveiro
  765.  
  766. +++++++++++++++++++++++++++
  767.  
  768. >From quinn@cs.uwa.edu.au (Quinn "The Eskimo!")
  769. Date: Tue, 14 Jun 1994 09:44:37 +0800
  770. Organization: Department of Computer Science, The University of Western Australia
  771.  
  772. In article <1994Jun13.180319.29615@waikato.ac.nz>, ldo@waikato.ac.nz
  773. (Lawrence D'Oliveiro, Waikato University) wrote:
  774.  
  775. >My workaround is a generic piece of assembly-language glue which looks
  776. >something like this:
  777. >
  778. >[...]
  779.  
  780. Neat hack!
  781.  
  782. Unfortunately the problem still stands, no matter how neat a hack you use
  783. to work around it ):
  784.  
  785. >Lawrence "Just call me the 'Speedbump, the Roadkill Hedgehog' of the
  786. >Information Superhighway" D'Oliveiro
  787.  
  788. *laugh*
  789. -- 
  790. Quinn "The Eskimo!"      <quinn@cs.uwa.edu.au>     "Support HAVOC!"
  791. Department of Computer Science, The University of Western Australia
  792.  
  793. ---------------------------
  794.  
  795. >From cvafy002@csupomona.edu
  796. Subject: Handling Events during AE OpenDoc Processing
  797. Date: 13 Jun 94 00:52:37 PST
  798. Organization: California State Polytechnic University, Pomona
  799.  
  800. What's the best way to handle event processing during an AppleEvent
  801. OpenDocument event?
  802.  
  803. In my application I step thru the docList retrieved from the AppleEvent and
  804. call my OpenDocument routine on each document as it is pulled out of the list.
  805. I'd like to put up a MovableModal or Modeless dialog to show progress and also
  806. allow the user to switch to other applications and even drop more documents on
  807. my application while it is running (I'm using a suspend/resume appleevent
  808. routine similar to the ones used in DragonSmith). Should I setup another event
  809. loop that I call during the Opening of the documents? All my application does
  810. is rename files based on settings the user specifies beforhand so the actual
  811. operations on each file are small but, I'd like get a good strategy for
  812. handling events when the processing time for each document increases.
  813.  
  814. Any comments are appreciated.
  815.  
  816.  
  817. +++++++++++++++++++++++++++
  818.  
  819. >From decartwr@gamera.syr.edu (Dana Cartwright 3rd)
  820. Date: Mon, 13 Jun 1994 11:45:06 GMT
  821. Organization: Syracuse University, Syracuse, New York
  822.  
  823. cvafy002@csupomona.edu wrote:
  824. : ..... I'd like get a good strategy for
  825. : handling events when the processing time for each document increases.
  826.  
  827. A strategy I use (and others in this group have mentioned similar
  828. strategies) is to divide my app into two parts, call them "hot" and
  829. "cool".  The "hot" part is responsible for being highly responsive to
  830. user requests (keystrokes and menu actions).  The "cool" part handles
  831. things which take a longer time.
  832.  
  833. In the "hot" sections, anything which would take a long time to execute
  834. is avoided...instead, a request is enqueued for the "cool" code to do
  835. the long-running work (the details of how this is done probably depend
  836. on your app, see my strategy below).       
  837.  
  838. When I call WNE and find I have no events queued up for me, I then
  839. dispatch the "cool" code.  It looks in its work-to-be-done queue and
  840. starts grinding away.  Since these are long-running tasks, there's a lot
  841. of the style of coding where tasks are interrupted with calls to WNE.
  842.  
  843. When the "cool" code is running, it will happen (frequently) that the
  844. user does something which causes the "hot" code to run.  So the "cool"
  845. and the "hot" code have to understand that they may run interleaved.
  846.  
  847. Note: this description is basically a description of cooperative multi-
  848. tasking, but carried out within one app rather than among apps.  The
  849. point is that it works beautifully.....my apps are highly responsive
  850. to mouse clicks, and you can "stack" a whole series of them with the
  851. app giving very quick visual feedback...also, you can issue a bunch of
  852. mouse clicks and then switch my app into the background.....all the
  853. "cool" code expects that it may run while the app is in the background.
  854.  
  855. Now, for my enqueue strategy: it's extremely simple!  I just have a 
  856. global 32-bit word in which each bit corresponds to some "cool" task.
  857. When the "hot" code sees that it needs to ask the "cool" routines to
  858. take on some work, it just flips on whichever of the 32 bits corresponds
  859. to that particular task.  In the "cool" code, there are up to 32
  860. tasks which can be dispatched, keyed off the 32 bits of the dispatch
  861. word.  By the way, since I dispatch starting with the left-most bit,
  862. I also achieve a strict prioritization: higher priority "cool" tasks
  863. are given bits near the high-order end of the 32-bit word.  Since
  864. enqueue/dequeue of tasks is no harder than flipping a bit, I've not
  865. got much overhead.
  866.  
  867. Anyway, I've used this strategy in several commercial apps, and users
  868. have commented on how responsive the software seems to be....so I
  869. claim some success!
  870.  
  871.  
  872. +++++++++++++++++++++++++++
  873.  
  874. >From partingt@fwi.uva.nl (Vincent Partington)
  875. Date: 14 Jun 1994 10:30:17 +0200
  876. Organization: FWI, University of Amsterdam
  877.  
  878. cvafy002@csupomona.edu writes:
  879.  
  880. >What's the best way to handle event processing during an AppleEvent
  881. >OpenDocument event?
  882.  
  883. The other replier mentioned partitioning his application into a "hot" and
  884. "cold" part. I do something similar but the implementation is
  885. different. I divide my programs into an interface part and a grunt-work part.
  886.  
  887. The interface part handles the interface stuff and has to be quick in giving
  888. time to other apps and is centered around the event loop. When the interface
  889. part wants the grunt-work part to do something it sends an Apple Event with
  890. all necessary information to itself.
  891.  
  892. The grunt-work part gets this information from the AppleEvent and starts
  893. processing but calls the "Yield" function at regular intervals. The Yield
  894. functions is the interface part: it does a WaitNextEvent and handles events
  895. until a null event comes up. Then the grunt-work part can continue.
  896.  
  897. The advantage of this recursion is that I have one event-loop and that the
  898. grunt-work part can be structured like you would on a machine with preemptive
  899. multitasking and no event-loop. You only have to call Yield once in a while,
  900. you don't have to split up your work and do it in little chunks getting the
  901. necessary status info from flag words and such (was I doing X or Y?).
  902.  
  903. But because of the recursion care should be taken not to get into infinite
  904. recursion. I do this by calling the "Activate" method of my Application-class
  905. when ever the grunt-work part start to do stuff that could take long: that
  906. method disables the menubar and sets the event mask to exclude High Level
  907. events. It also sets a flag so the Yield function knows to give a sleep time
  908. of 0 ticks to WaitNextEvent. At the end of the grunt-work function (the Apple
  909. Event handler) the "Deactivate" method is called and the application returns
  910. to idle state.
  911.  
  912. Another advantage is that all communication goes to the grunt-work part
  913. through Apple Events: because of this my applications are recordable and
  914. scriptable.
  915.  
  916. I have developed no commercial applications with this, but I'm developing a
  917. C++ DropBox class library using this approach. The idea is to make it easy
  918. to implement an algorithm for file conversion (like Unix "filters") without
  919. having to muck about with event loops. 
  920. This class library should see the public domain when CodeWarrior supports
  921. exception handling and templates, so I can test my exception handling code.
  922.  
  923. Vincent.
  924. -- 
  925. My opinions are not my own. I copy them    | Internet : partingt@fwi.uva.nl
  926. from books, television, video, the net,    |            vincent@tnc.nl
  927. my friends, my parents, my teachers and    | FidoNet  : 2:281/202.15
  928. and numerous other contributors.           | NeST     : 90:500/202.15
  929.  
  930. ---------------------------
  931.  
  932. >From alex@metcalf.demon.co.uk (Alex Metcalf)
  933. Subject: How to determine which Finder windows are open?
  934. Date: Fri, 10 Jun 1994 23:17:19 GMT
  935. Organization: Best Before Yesterday
  936.  
  937.  
  938. Up until a few weeks ago I thought it was impossible to read information
  939. such as which Finder windows are open, the positions of icons in that
  940. window (I know that's in the DB, but I don't know how to check for the open
  941. window), etc.
  942.  
  943. However, Popup Folder lets you click on a finder folder and see some stuff
  944. about its hierarchy. So there MUST be a way! Also, that screen saver
  945. software that has stuff interacting with your finder windows.
  946.  
  947. I've posted once already with no reply, and this information would be
  948. really useful for me. Can anyone help me by telling me how my app can find
  949. out ANY of these:
  950.  
  951. o   The open windows in the Finder
  952. o   The names / folder paths of open windows in the Finder
  953. o   The names and locations of folders in an open window in the Finder
  954.  
  955. Thanks!
  956.  
  957.  
  958. Alex
  959.  
  960. --
  961. Alex Metcalf, Best Before Yesterday
  962. Mac programmer in C, C++, HyperTalk, assembler
  963. Juggler, 3-ball tricks
  964.  
  965. Internet:          alex@metcalf.demon.co.uk
  966. Fax (UK):          (0570) 45636
  967. Fax (US / Canada): 011 44 570 45636
  968.  
  969. +++++++++++++++++++++++++++
  970.  
  971. >From gurgle@netcom.com (Pete Gontier)
  972. Date: Mon, 13 Jun 1994 05:37:31 GMT
  973. Organization: cellular
  974.  
  975. alex@metcalf.demon.co.uk (Alex Metcalf) writes:
  976.  
  977. >Up until a few weeks ago I thought it was impossible to read
  978. >information such as which Finder windows are open, the positions of
  979. >icons in that window (I know that's in the DB, but I don't know how
  980. >to check for the open window), etc. However, Popup Folder lets you
  981. >click on a finder folder and see some stuff about its hierarchy. So
  982. >there MUST be a way! Also, that screen saver software that has stuff
  983. >interacting with your finder windows.
  984.  
  985. The question is not whether it can be done or how it can be done. Those
  986. are comparatively easy questions, and I will take a swipe at answering
  987. them below. The really interesting question, however, is this: do you
  988. really want to?
  989.  
  990. Finder is an application. Like many apps, it stores data in the 'refCon'
  991. field of its window records. That data, I believe, is a handle, but
  992. perhaps a pointer, to a C++ object which contains handles or pointers
  993. to other C++ objects, etc. etc. Using MacsBug, you can reverse engineer
  994. these *absitively posolutely private* data structures to determine the
  995. information you want.
  996.  
  997. Of course, this assumes you somehow have access to Finder's window list.
  998. You'll probably have to write an INIT resource to do this.
  999.  
  1000. This is the first part of the question: do you really want to do all the
  1001. work involved in this reverse engineering? It's non-trivial, especially
  1002. if your MacsBug skills are not polished.
  1003.  
  1004. The second part of the question is more of the same. Assuming you want
  1005. to put in this kind of work, are you willing to put in this kind of work
  1006. for System 7, System 7.1, System 7 Pro, and System 7.5? How about System
  1007. 6 and for each version of the System before? And each version of the
  1008. System after 7.5? Because the information is different in all of these
  1009. cases.
  1010.  
  1011. I'm not trying to be a wet blanket, but I do feel like I ought to try to
  1012. discourage you for your own good. You can do it; I've done it. But you
  1013. had better be sure it's worth the effort.
  1014. -- 
  1015.  Pete Gontier, CTO, Integer Poet Software; gurgle@netcom.com
  1016.  
  1017.  "...where they burn books, people are next." -- XTC
  1018.  
  1019. +++++++++++++++++++++++++++
  1020.  
  1021. >From jwbaxter@olympus.net (John W. Baxter)
  1022. Date: Mon, 13 Jun 1994 00:06:49 -0700
  1023. Organization: Internet for the Olympic Peninsula
  1024.  
  1025. In article <gurgleCrBMAK.61D@netcom.com>, gurgle@netcom.com (Pete Gontier)
  1026. wrote:
  1027.  
  1028. > alex@metcalf.demon.co.uk (Alex Metcalf) writes:
  1029. > >Up until a few weeks ago I thought it was impossible to read
  1030. > >information such as which Finder windows are open, the positions of
  1031. > >icons in that window (I know that's in the DB, but I don't know how
  1032. > >to check for the open window), etc. However, Popup Folder lets you
  1033. > >click on a finder folder and see some stuff about its hierarchy. So
  1034. > >there MUST be a way! Also, that screen saver software that has stuff
  1035. > >interacting with your finder windows.
  1036. > The question is not whether it can be done or how it can be done. Those
  1037. > are comparatively easy questions, and I will take a swipe at answering
  1038. > them below. The really interesting question, however, is this: do you
  1039. > really want to?
  1040. > ... [Reverse engineering 1.01 omitted]
  1041. > The second part of the question is more of the same. Assuming you want
  1042. > to put in this kind of work, are you willing to put in this kind of work
  1043. > for System 7, System 7.1, System 7 Pro, and System 7.5? How about System
  1044. > 6 and for each version of the System before? And each version of the
  1045. > System after 7.5? Because the information is different in all of these
  1046. > cases.
  1047. > I'm not trying to be a wet blanket, but I do feel like I ought to try to
  1048. > discourage you for your own good. You can do it; I've done it. But you
  1049. > had better be sure it's worth the effort.
  1050.  
  1051. Particulary, does he want to do this for System 7.5, whose Finder is happy
  1052. to tell you:
  1053.  
  1054. tell application "Finder"
  1055.     get every window
  1056. end tell
  1057.  
  1058. will return something like this (translated to text, from its list of
  1059. objects form):
  1060.     {window of folder "HyperCard 2.2" of startup disk of application
  1061. "Finder", window of startup disk of application "Finder"}
  1062.  
  1063. And
  1064. tell application "Finder"
  1065.     get name of every window
  1066. end tell
  1067.  
  1068. will return just the names, if that's all you want:  {"HyperCard 2.2",
  1069. "Vashon"}
  1070.  
  1071. Seems a whole lot simpler to me.  [Alex's own app can send the necessary
  1072. event.]
  1073.  
  1074. -- 
  1075. John Baxter    Port Ludlow, WA, USA  [West shore, Puget Sound]
  1076.    No hablo Intel.
  1077.    jwbaxter@pt.olympus.net
  1078.  
  1079. ---------------------------
  1080.  
  1081. >From jrrk@camcon.co.uk (Jonathan Kimmitt)
  1082. Subject: Metrowerks code generation wierdness
  1083. Date: 6 Jun 94 21:10:45 GMT
  1084. Organization: Cambridge Consultants Limited
  1085.  
  1086. Has anybody noticed that Metrowerks DR/2 and DR/3 return values from
  1087. functions
  1088. in different registers depending on what the function result type is ?
  1089.  
  1090. a function such as 'char *xmalloc(long)' returns in A0
  1091. whereas a function such as 'long temps(void)' returns in D0
  1092.  
  1093. No other compiler that I have ever seen for the 68K does this. ANSI C
  1094. allows this,
  1095. but as far as I can see it is impossible to guarantee correct code unless
  1096. 'require prototypes' is checked, which makes it more difficult to port
  1097. old non ANSI (K&R) code.
  1098.  
  1099. For the above functions declared in file A (xmalloc is a function which
  1100. allocates
  1101. memory), if file B contains
  1102.  
  1103.     {
  1104.     struct junk *ptr = (struct junk *)xmalloc(sizeof(struct junk));
  1105.     .....
  1106.  
  1107.  
  1108. incorrect code will be generated if your forget to use the prototype
  1109. because xmalloc will be assumed to return int and the value to be put in
  1110. ptr
  1111. will be assumed to be in D0, whereas the actual function will put the
  1112. result in A0
  1113. before returning. The result is that ptr will end up pointing to a random
  1114. location
  1115. in memory and will most likely cause a bus error or crash your mac.
  1116.  
  1117. THINK C (with 4-byte ints on), MPW and gcc will handle this case
  1118. correctly, so if
  1119. you are porting to Metrowerks you might not notice this bug in your code
  1120. until
  1121. it is too late.
  1122.  
  1123. One might speculate that this feature was implemented to improve
  1124. efficiency, since theoretically a pointer returned in A0 can be used
  1125. immediately. In practise it means
  1126. that code resources developed with Metrowerks might not be able to be 
  1127. used with another compiler
  1128. if they return pointers, and vice versa. Since this is a compatability
  1129. issue, one would 
  1130. expect that this feature should be made optional. Your constructive
  1131. comments are invited ...
  1132.  
  1133. +++++++++++++++++++++++++++
  1134.  
  1135. >From zstern@adobe.com (Zalman Stern)
  1136. Date: Tue, 7 Jun 1994 01:26:27 GMT
  1137. Organization: Adobe Systems Incorporated
  1138.  
  1139. Jonathan Kimmitt writes
  1140. > One might speculate that this feature was implemented to improve
  1141. > efficiency, since theoretically a pointer returned in A0 can be used
  1142. > immediately. In practise it means
  1143. > that code resources developed with Metrowerks might not be able to be 
  1144. > used with another compiler
  1145. > if they return pointers, and vice versa. Since this is a compatability
  1146. > issue, one would 
  1147. > expect that this feature should be made optional. Your constructive
  1148. > comments are invited ...
  1149.  
  1150. The 68k Macintosh has no standard C calling convention. The solution for  
  1151. things like code resources is to use the Pascal calling convention for every  
  1152. cross-interface call. In a couple years, PowerPC will have totally taken  
  1153. over and such concerns (along with A5 and A4 worlds) will be but dim  
  1154. nightmares from the past.
  1155. --
  1156. Zalman Stern           zalman@adobe.com            (415) 962 3824
  1157. Adobe Systems, 1585 Charleston Rd., POB 7900, Mountain View, CA 94039-7900
  1158.    Never let a "final candidate" subscript get above the age of consent.
  1159.  
  1160. +++++++++++++++++++++++++++
  1161.  
  1162. >From johnmce@world.std.com (John McEnerney)
  1163. Date: Tue, 7 Jun 1994 15:42:08 GMT
  1164. Organization: The World Public Access UNIX, Brookline, MA
  1165.  
  1166.  
  1167. >a function such as 'char *xmalloc(long)' returns in A0
  1168. >whereas a function such as 'long temps(void)' returns in D0
  1169. >
  1170. >No other compiler that I have ever seen for the 68K does this. ANSI C
  1171. >allows this,
  1172. >but as far as I can see it is impossible to guarantee correct code unless
  1173. >'require prototypes' is checked, which makes it more difficult to port
  1174. >old non ANSI (K&R) code.
  1175.  
  1176. As far as the ANSI standard is concerned, it would never be correct to 
  1177. call a function defined as returning a pointer when there is no 
  1178. declaration in scope. You cannot assume that 'int' and 'pointer' have the 
  1179. same representation, and we are allowed to use different calling 
  1180. conventions for them.
  1181.  
  1182. You can force the compiler to return pointers in D0 (this is sometimes 
  1183. necessary for calling C code generated by the MPW compiler) by using
  1184.  
  1185. #pragma pointers_in_D0
  1186.  
  1187. -- John McEnerney, Metrowerks PowerPC Product Architect
  1188.  
  1189.  
  1190. +++++++++++++++++++++++++++
  1191.  
  1192. >From astalker@nickel.ucs.indiana.edu (Altan J. Stalker)
  1193. Date: Tue, 7 Jun 1994 15:23:57 GMT
  1194. Organization: Indiana University, Bloomington IN
  1195.  
  1196. In article <46180@io.camcon.co.uk>, Jonathan Kimmitt <jrrk@camcon.co.uk> wrote:
  1197. >Has anybody noticed that Metrowerks DR/2 and DR/3 return values from
  1198. >functions
  1199. >in different registers depending on what the function result type is ?
  1200. >
  1201. > [stuff deleted]
  1202. >
  1203. > ... Since this is a compatability
  1204. > issue, one would 
  1205. > expect that this feature should be made optional. Your constructive
  1206. > comments are invited ...
  1207.  
  1208. Although I have never used it, a pragma exists to turn this feature
  1209. on and off.
  1210.  
  1211. pointers_in_A0   Make functions return pointers in the 68000 register A0
  1212.          [default]
  1213.  
  1214. pointers_in_d0   Make functions return pointers in the 68000 D0 register
  1215.                  [what you wanted]
  1216.  
  1217. (this is from the _Metrowerks C Language Reference DR/2_ page 13)
  1218.  
  1219. --
  1220. Altan J. Stalker, Indiana University, Bloomington IN
  1221. astalker@nickel.ucs.indiana.edu
  1222.  
  1223.  
  1224.  
  1225.  
  1226.  
  1227.  
  1228. +++++++++++++++++++++++++++
  1229.  
  1230. >From Bruce@hoult.actrix.gen.nz (Bruce Hoult)
  1231. Date: Wed, 8 Jun 1994 16:13:53 +1200 (NZST)
  1232. Organization: (none)
  1233.  
  1234. zstern@adobe.com (Zalman Stern) writes:
  1235. > The 68k Macintosh has no standard C calling convention. The solution for  
  1236. > things like code resources is to use the Pascal calling convention for every  
  1237. > cross-interface call. In a couple years, PowerPC will have totally taken  
  1238. > over and such concerns (along with A5 and A4 worlds) will be but dim  
  1239. > nightmares from the past.
  1240.  
  1241. ... to be replaced by new nightmares such as having to remember to put all
  1242. floating point paramaters after all integer parameters, if you want them
  1243. to fit into registers :-(
  1244.  
  1245. -- Bruce "anyone who designs a calling convention around k&r should be shot" Hoult
  1246.  
  1247. +++++++++++++++++++++++++++
  1248.  
  1249. >From jwbaxter@olympus.net (John W. Baxter)
  1250. Date: Wed, 08 Jun 1994 00:36:39 -0700
  1251. Organization: Internet for the Olympic Peninsula
  1252.  
  1253. In article <2853936833@hoult.actrix.gen.nz>, Bruce@hoult.actrix.gen.nz
  1254. (Bruce Hoult) wrote:
  1255.  
  1256. > ... to be replaced by new nightmares such as having to remember to put all
  1257. > floating point paramaters after all integer parameters, if you want them
  1258. > to fit into registers :-(
  1259.  
  1260. Wouldn't have been necessary if the ANSI folks had required prototypes
  1261. instead of offering them as a no-cost extra.  [That would have probably
  1262. exceeded the subcommittee's charter, since it would not have codified
  1263. existing practice, but broken new ground.  It WOULD have produced a better
  1264. language, though.]
  1265.  
  1266. -- 
  1267. John Baxter    Port Ludlow, WA, USA  [West shore, Puget Sound]
  1268.    No hablo Intel.
  1269.    jwbaxter@pt.olympus.net
  1270.  
  1271. +++++++++++++++++++++++++++
  1272.  
  1273. >From d88-jwa@dront.nada.kth.se (Jon Wätte)
  1274. Date: 9 Jun 1994 09:15:16 GMT
  1275. Organization: The Royal Institute of Technology
  1276.  
  1277. In <46180@io.camcon.co.uk> jrrk@camcon.co.uk (Jonathan Kimmitt) writes:
  1278.  
  1279. >a function such as 'char *xmalloc(long)' returns in A0
  1280. >whereas a function such as 'long temps(void)' returns in D0
  1281.  
  1282. >No other compiler that I have ever seen for the 68K does this. ANSI C
  1283.  
  1284. Most non-mac compilers for the 68K I've seen does this.
  1285.  
  1286. You can turn it off with #pragma pointers_in_D0
  1287.  
  1288. cheers,
  1289.  
  1290.                     / h+
  1291. -- 
  1292.  -- Jon W{tte, h+@nada.kth.se, Mac Software Engineer Deluxe --
  1293.  
  1294.  -- I don't fear death, it's dying that scares me.
  1295.  
  1296. +++++++++++++++++++++++++++
  1297.  
  1298. >From platypus@cirrus.som.cwru.edu (Gary Kacmarcik)
  1299. Date: 09 Jun 1994 14:30:42 GMT
  1300. Organization: Case Western Reserve University, Cleveland, Ohio (USA)
  1301.  
  1302.  
  1303. In article <2853936833@hoult.actrix.gen.nz> Bruce@hoult.actrix.gen.nz (Bruce Hoult) writes:
  1304. >
  1305. > zstern@adobe.com (Zalman Stern) writes:
  1306. > > [...]   In a couple years, PowerPC will have totally taken  
  1307. > > over and such concerns (along with A5 and A4 worlds) will be but dim  
  1308. > > nightmares from the past.
  1309. >
  1310. >  ... to be replaced by new nightmares such as having to remember to put all
  1311. > floating point paramaters after all integer parameters, if you want them
  1312. > to fit into registers :-(
  1313.  
  1314. i don't know what you mean by this.  the PowerPC calling conventions that
  1315. i'm familiar with do not require this.
  1316.  
  1317. for the PowerPC, standard function calling conventions state that fixed-
  1318. point arguments go in r3-r10, floating-point arguments go in fr1-fr13.
  1319.  
  1320. if you define something like:
  1321.  
  1322.    int foo(int a,float b,int c,double d)
  1323.  
  1324. the parameters will be mapped to registers as follows:
  1325.   a:  r3
  1326.   b:  fr1
  1327.   c:  r4
  1328.   d:  fr2
  1329.  
  1330. according to this ABI, it is explicitly stated that parameters can be
  1331. declared in any order, and the fixed- and floating-point registers will
  1332. be used as efficiently as possible.
  1333.  
  1334. -gary j kacmarcik
  1335. platypus@cirrus.som.cwru.edu
  1336.  
  1337. +++++++++++++++++++++++++++
  1338.  
  1339. >From johnmce@world.std.com (John McEnerney)
  1340. Date: Thu, 9 Jun 1994 15:09:56 GMT
  1341. Organization: The World Public Access UNIX, Brookline, MA
  1342.  
  1343. platypus@cirrus.som.cwru.edu (Gary Kacmarcik) writes:
  1344.  
  1345. >if you define something like:
  1346. >   int foo(int a,float b,int c,double d)
  1347. >the parameters will be mapped to registers as follows:
  1348. >  a:  r3
  1349. >  b:  fr1
  1350. >  c:  r4
  1351. >  d:  fr2
  1352.  
  1353. WRONG! (You would think this would be the case, but it is not)
  1354.  
  1355. a: r3
  1356. b: fr1 (r4 is reserved)
  1357. c: r5
  1358. d: fr2 (r6 and r7 are reserved)
  1359.  
  1360. additional integer arguments go in r8, etc. This is a strange nuance to 
  1361. the IBM PowerPC ABI. I believe that it is used for calling functions 
  1362. which have no prototype in scope, e.g. if I call printf() without 
  1363. including <stdio.h> (which is illegal in ANSI) the compiler will pass the 
  1364. floating-point arguments in -both- the integer and floating-point 
  1365. registers, so the callee can work correctly no matter if it takes a 
  1366. variable number of arguments or has arguments declared as floating-point 
  1367. types. Note that as the original poster pointed out, you get best results 
  1368. by declaring your integer arguments first and then your floating-point 
  1369. arguments.
  1370.  
  1371. The CodeWarrior compiler does not implement this feature, since the ANSI 
  1372. standard us strict on this issue (it is illegal to call a function taking 
  1373. a variable number of arguments without a prototype) However, for 
  1374. compatibility with the Apple Toolbox and such, we incur the same penalty 
  1375. in register usage.
  1376.  
  1377. -- John McEnerney, Metrowerks PowerPC Product Architect
  1378.  
  1379.  
  1380. +++++++++++++++++++++++++++
  1381.  
  1382. >From Bruce@hoult.actrix.gen.nz (Bruce Hoult)
  1383. Date: Fri, 10 Jun 1994 16:45:43 +1200 (NZST)
  1384. Organization: (none)
  1385.  
  1386. platypus@cirrus.som.cwru.edu (Gary Kacmarcik) writes:
  1387. > >  ... to be replaced by new nightmares such as having to remember to put all
  1388. > > floating point paramaters after all integer parameters, if you want them
  1389. > > to fit into registers :-(
  1390. > i don't know what you mean by this.  the PowerPC calling conventions that
  1391. > i'm familiar with do not require this.
  1392. > for the PowerPC, standard function calling conventions state that fixed-
  1393. > point arguments go in r3-r10, floating-point arguments go in fr1-fr13.
  1394. > if you define something like:
  1395. >    int foo(int a,float b,int c,double d)
  1396. > the parameters will be mapped to registers as follows:
  1397. >   a:  r3
  1398. >   b:  fr1
  1399. >   c:  r4
  1400. >   d:  fr2
  1401. > according to this ABI, it is explicitly stated that parameters can be
  1402. > declared in any order, and the fixed- and floating-point registers will
  1403. > be used as efficiently as possible.
  1404.  
  1405. Would that it were so!
  1406.  
  1407. Unfortunately, this directly contradicts Apple's _Inside Macintosh: PowerPC
  1408. System Software_, page 1-50:
  1409.  
  1410. "Placing a floating point parameter into a floating point register also
  1411. reserves one or two genrral-purpose registers, depending on whether the
  1412. paramater is 32 or 64 bits long.  This behavious is dictated in order to
  1413. support the ability of a C function to call another function without
  1414. knowing the number or types of the callee's parameters. [...]  The only
  1415. difference betwen cases in which the prototype is available and cases
  1416. in which the prototype isn't available is that the floating point
  1417. parameters are copied into the general-purpose register(s) in the latter
  1418. case but not in the former."
  1419.  
  1420. [there follows an example of register mapping]
  1421.  
  1422. "NOTE.  It would have been possible to pas all the fixed point values in
  1423. registers if the floating-point parameters had been grouped at the end of
  1424. the parameter list".
  1425.  
  1426.  
  1427. I would *love* to learn that this is wrong.
  1428.  
  1429. -- Bruce
  1430.  
  1431. +++++++++++++++++++++++++++
  1432.  
  1433. >From platypus@cirrus.som.cwru.edu (Gary Kacmarcik)
  1434. Date: 10 Jun 1994 20:22:51 GMT
  1435. Organization: Case Western Reserve University, Cleveland, Ohio (USA)
  1436.  
  1437. In article <Cr4y4K.K57@world.std.com> johnmce@world.std.com (John McEnerney) writes:
  1438. >
  1439. > platypus@cirrus.som.cwru.edu (Gary Kacmarcik) writes:
  1440. >
  1441. > >if you define something like:
  1442. > >   int foo(int a,float b,int c,double d)
  1443. > >the parameters will be mapped to registers as follows:
  1444. > >  a:  r3
  1445. > >  b:  fr1
  1446. > >  c:  r4
  1447. > >  d:  fr2
  1448. >
  1449. > WRONG! (You would think this would be the case, but it is not)
  1450.  
  1451. i looked this up when i got home and discovered that what i was describing
  1452. was the *Embedded* ABI, which apparently has a more intelligent way
  1453. of allocating registers.  it also has things like not always generating
  1454. the (typically unused) 'param area' to shadow the GPR's on the stack - 
  1455. it only generates a param area if it's needed.
  1456.  
  1457. apparently the embedded people care more about having proper register and
  1458. stack allocation and are willing to forsake screwy calling conventions
  1459. to get it.  ;-)
  1460.  
  1461. it's funny that i never came across an example that exposed this - i guess
  1462. i don't do as much floating-point code as i thought.
  1463.  
  1464.  
  1465. -gary j kacmarcik
  1466. platypus@cirrus.som.cwru.edu
  1467.  
  1468. +++++++++++++++++++++++++++
  1469.  
  1470. >From zstern@adobe.com (Zalman Stern)
  1471. Date: Sat, 11 Jun 1994 01:30:31 GMT
  1472. Organization: Adobe Systems Incorporated
  1473.  
  1474. Gary Kacmarcik writes
  1475. > apparently the embedded people care more about having proper register and
  1476. > stack allocation and are willing to forsake screwy calling conventions
  1477. > to get it.  ;-)
  1478.  
  1479. The embedded people have the advantage of defining their calling convention  
  1480. four years later when it is obvious what you can and cannot realistically  
  1481. depend on in ANSI-C code. They are also willing to sacrifice a little more  
  1482. for performance. (I.e. portability is less of a concern in embedded code.)
  1483. --
  1484. Zalman Stern           zalman@adobe.com            (415) 962 3824
  1485. Adobe Systems, 1585 Charleston Rd., POB 7900, Mountain View, CA 94039-7900
  1486.    Never let a "final candidate" subscript get above the age of consent.
  1487.  
  1488. +++++++++++++++++++++++++++
  1489.  
  1490. >From Bruce@hoult.actrix.gen.nz (Bruce Hoult)
  1491. Date: Sun, 12 Jun 1994 21:03:48 +1200 (NZST)
  1492. Organization: (none)
  1493.  
  1494. platypus@cirrus.som.cwru.edu (Gary Kacmarcik) writes:
  1495. > i looked this up when i got home and discovered that what i was describing
  1496. > was the *Embedded* ABI, which apparently has a more intelligent way
  1497. > of allocating registers.  it also has things like not always generating
  1498. > the (typically unused) 'param area' to shadow the GPR's on the stack - 
  1499. > it only generates a param area if it's needed.
  1500. > apparently the embedded people care more about having proper register and
  1501. > stack allocation and are willing to forsake screwy calling conventions
  1502. > to get it.  ;-)
  1503. > it's funny that i never came across an example that exposed this - i guess
  1504. > i don't do as much floating-point code as i thought.
  1505.  
  1506. Agreed that it's screwy (I have to -- I'm the one that started this :-),
  1507. but there are some nice things in the PPC calling conventions as well, most
  1508. of them designed to make tiny functions extremely efficient.
  1509.  
  1510. For example, it's really nice that you can quite legally push a few things
  1511. on the stack without adjusting the stack pointer, because you can depend
  1512. on interrupt routines always skipping over the first couple of hundred
  1513. bytes of stack, in case you're using it.
  1514.  
  1515. It's also neat that a function like...
  1516.  
  1517.   long myAdd(long a, long b){return a+b;}
  1518.  
  1519. ...can be compiled into just...
  1520.  
  1521.   add r3,r3,r4
  1522.   blr
  1523.  
  1524. ...which results in no memory access at all (other than instruction
  1525. fetch).  Most 68k compilers will give even this function the full
  1526. treatment...
  1527.  
  1528.   link a6,#0
  1529.   move.l 8(a6),d0
  1530.   add.l 12(a6),d0
  1531.   unlk a6
  1532.   rts
  1533.  
  1534. ... not to mention the caller setting up the stack beforehand, and
  1535. cleaning off the parameters afterwards, causing eight memory references
  1536. in using this little function (ten for Pascal calling conventions)
  1537.  
  1538. In fact, on many code examples I've looked at, the PPC code is actually
  1539. *smaller* than the equivalent 68K code generated by the MPW or Symantec
  1540. compilers.
  1541.  
  1542. -- Bruce
  1543.  
  1544. +++++++++++++++++++++++++++
  1545.  
  1546. >From platypus@cirrus.som.cwru.edu (Gary Kacmarcik)
  1547. Date: 12 Jun 1994 18:18:31 GMT
  1548. Organization: Case Western Reserve University, Cleveland, Ohio (USA)
  1549.  
  1550. In article <2854299828@hoult.actrix.gen.nz> Bruce@hoult.actrix.gen.nz (Bruce Hoult) writes:
  1551. >
  1552. > Agreed that it's screwy (I have to -- I'm the one that started this :-),
  1553. > but there are some nice things in the PPC calling conventions as well, most
  1554. > of them designed to make tiny functions extremely efficient.
  1555. >
  1556. > For example, it's really nice that you can quite legally push a few things
  1557. > on the stack without adjusting the stack pointer, because you can depend
  1558. > on interrupt routines always skipping over the first couple of hundred
  1559. > bytes of stack, in case you're using it.
  1560.  
  1561. hmmm... i don't think that i would have chosen this particular example to
  1562. try to demonstrate why the calling conventions _weren't_ screwy.  ;-)
  1563. when i first saw IBM's compiler generating code that placed values above
  1564. the stack ptr, my first response was <ick>.
  1565.  
  1566. i can deal with it now that i understand that the compiler's trying to insure
  1567. that r1 is always pointing to a value stack frame.  one thing i wonder about
  1568. (but have yet to try) is how alloca() is handled.
  1569.  
  1570. overall, the calling conventions aren't bad and there are many advantages.
  1571. but there certainly are wierdnesses.
  1572.  
  1573.  
  1574. gary j kacmarcik
  1575. platypus@cirrus.som.cwru.edu
  1576.  
  1577. +++++++++++++++++++++++++++
  1578.  
  1579. >From Bruce@hoult.actrix.gen.nz (Bruce Hoult)
  1580. Date: Mon, 13 Jun 1994 19:41:53 +1200 (NZST)
  1581. Organization: (none)
  1582.  
  1583. platypus@cirrus.som.cwru.edu (Gary Kacmarcik) writes:
  1584. > > For example, it's really nice that you can quite legally push a few things
  1585. > > on the stack without adjusting the stack pointer, because you can depend
  1586. > > on interrupt routines always skipping over the first couple of hundred
  1587. > > bytes of stack, in case you're using it.
  1588. > hmmm... i don't think that i would have chosen this particular example to
  1589. > try to demonstrate why the calling conventions _weren't_ screwy.  ;-)
  1590. > when i first saw IBM's compiler generating code that placed values above
  1591. > the stack ptr, my first response was <ick>.
  1592. > i can deal with it now that i understand that the compiler's trying to insure
  1593. > that r1 is always pointing to a value stack frame.  one thing i wonder about
  1594. > (but have yet to try) is how alloca() is handled.
  1595. > overall, the calling conventions aren't bad and there are many advantages.
  1596. > but there certainly are wierdnesses.
  1597.  
  1598. The way I look at it is that most of this stuff has been designed to be
  1599. fast running, even if it make life hell for the asm programmer trying to
  1600. keep track of things manually.  That, after all, being what compilers
  1601. are for.
  1602.  
  1603. -- Bruce
  1604.  
  1605. ---------------------------
  1606.  
  1607. >From rang@winternet.com (Anton Rang)
  1608. Subject: PPC and 64-bit video (was Re: Fast full screen scrolling: impossible?)
  1609. Date: 13 Jun 1994 02:33:06 GMT
  1610. Organization: Minnesota Angsters
  1611.  
  1612. In article <1994Jun12.182803.1@west.cscwc.pima.edu> 103t_english@west.cscwc.pima.edu writes:
  1613. >d e v e l o p 18 claims that the PPC blitter that they used was slower than
  1614. >CopyBits because it didn't (presumably, for some unknown reason, *couldn't*)
  1615. >take advantage of the 64-bit path of video.
  1616.  
  1617.   Unless you're using the floating-point registers, you can't use the
  1618. full 64-bit path efficiently, because there's no 64-bit integer load.
  1619. I haven't looked at NQDCopyBits to see if it uses the FP registers; I
  1620. suppose that it *could*, in cases where there is no scaling, shifting,
  1621. etc. but it seems unlikely that it would.
  1622.  
  1623. >For this same reason, *BlockMove* was also slower.
  1624.  
  1625.   Well, BlockMove is going to be slower on the PPC because the video
  1626. memory is noncachable and BlockMove will pre-zero it using the dcbz
  1627. instruction ('zero-cache-block').  Using dcbz is a big win when doing
  1628. copies between cachable blocks, because it eliminates the pre-read
  1629. that the processor will otherwise do when storing data.
  1630.  
  1631.   The Power Macintosh NuBus technical note addresses this, and
  1632. includes a new interface, PBBlockMove, which is supposed to take into
  1633. account the cachability of source and destination memory ranges.  (No
  1634. word on when this will be shipping or whether it will be licensable as
  1635. a system extension.)
  1636.  
  1637. >What is going on with the memory subsystem in the PowerMacs? Is it or isn't it
  1638. >64-bit? Is the DRAM video 64-bit? Is the AV video? Is the non-AV PDS video?
  1639.  
  1640.   The non-AV PDS VRAM is 64-bit, the DRAM is 64-bit (all of memory
  1641. is).  The AV bus internally is 32-bits (it's the same chips as on the
  1642. 680x0 AVs), but might have a 64-bit interface to the processor bus; I
  1643. haven't looked.
  1644.  
  1645. > [ questions about video bandwidth deleted, i have no answers ]
  1646. >For that matter, why can't BlockMove move data in 64-bit chunks when
  1647. >it is most optimal to do so?
  1648.  
  1649.   It can.  The problem is the dcbz, which when used with video memory
  1650. will result in every word being written twice.  That's why you should
  1651. use CopyBits instead.  :-)
  1652.  
  1653. >And finally, what happened to the load/store multiple instructions
  1654. >that are (I assume?) faster on the 601, but will probably be slower
  1655. >"in future implementations?"
  1656.  
  1657.   They're actually not faster on the 601, they simply take less code
  1658. space.  They still take one cycle per register to process.  I haven't
  1659. checked to see whether they're slower on the 603/604, but would guess
  1660. that they may cause synchronization on the 603, which would certainly
  1661. slow things down relative to just using plain load/store.
  1662.  
  1663.   The fastest way to move memory on the 601 is to use floating-point
  1664. registers (load/store double), coupled with 'dcbz' if you're going to
  1665. cachable memory, but *not* when you're going to non-cachable memory.
  1666. (All of this presumes aligned memory, incidentally; if you're not
  1667. aligned, you're out of luck and probably need to use the string
  1668. instructions instead.)
  1669. --
  1670. Anton Rang (rang@winternet.com)
  1671.  
  1672. ---------------------------
  1673.  
  1674. >From Frank Manshande <frankm@and.nl>
  1675. Subject: Playing QuickTime movies
  1676. Date: Mon, 6 Jun 1994 11:41:21 GMT
  1677. Organization: AND Software BV
  1678.  
  1679. Hi,
  1680.  
  1681. I have a question concerning playing QuickTime movies.
  1682.  
  1683. What I want is to store the movie (data) into the datafork at
  1684. a specific offset (for example at offset 3000), and later play
  1685. that movie from that offset. This way I can put more than one
  1686. QuickTime movie into one file and play a movie at a specific
  1687. offset.
  1688.  
  1689. The call "PutMovieIntoDataFork" only seems to store the movie
  1690. structure, and not the movie data, into a file at the specified
  1691. offset. This way the PutMovieIntoDataFork call creates a file
  1692. of about 1,5 KB which only contains a reference to the original
  1693. movie data file.
  1694.  
  1695. Does anybody have suggestions? I would be very grateful!
  1696.  
  1697. Frank Manshande
  1698. frankm@and.nl
  1699.  
  1700. +++++++++++++++++++++++++++
  1701.  
  1702. >From breger@netcom.com (Ron Breger)
  1703. Date: Mon, 6 Jun 1994 17:49:45 GMT
  1704. Organization: Netcom
  1705.  
  1706. Frank Manshande (frankm@and.nl) wrote:
  1707. : Hi,
  1708.  
  1709. : I have a question concerning playing QuickTime movies.
  1710.  
  1711. : What I want is to store the movie (data) into the datafork at
  1712. : a specific offset (for example at offset 3000), and later play
  1713. : that movie from that offset. This way I can put more than one
  1714. : QuickTime movie into one file and play a movie at a specific
  1715. : offset.
  1716.  
  1717. : The call "PutMovieIntoDataFork" only seems to store the movie
  1718. : structure, and not the movie data, into a file at the specified
  1719. : offset. This way the PutMovieIntoDataFork call creates a file
  1720. : of about 1,5 KB which only contains a reference to the original
  1721. : movie data file.
  1722.  
  1723. I am having the same problem, but I am using handles.
  1724. This is something that I'm trying to do:
  1725.  
  1726.  
  1727. // save the moive
  1728. PutMoiveIntoHandle()
  1729. AddResource(publicMoive, 'MRES', 1000, "");
  1730. ReleaseResource(publicMovie);
  1731.  
  1732. then
  1733.  
  1734. // play the movie
  1735. publicMovie = GetResource('MRES',1000);
  1736. DetachResource(publicMoive);
  1737. StartMoive(publicMoive);
  1738.  
  1739.  
  1740. I would like to have one (resource) file to contain many movies.
  1741. I don't want to use MovieFiles.  I would like the data
  1742. to be in a resource and not contain any references to
  1743. the original files.  Is this possible?
  1744.  
  1745. Please help.  (email or post).
  1746.  
  1747. Thanks.
  1748. Ron Breger
  1749.  
  1750. -- 
  1751. =====================================================================
  1752. Ron Breger         
  1753. breger@netcom.com                              AppleLink: RON.BREGER
  1754. =====================================================================
  1755.  
  1756. +++++++++++++++++++++++++++
  1757.  
  1758. >From ivanski@world.std.com (Ivan M CaveroBelaunde)
  1759. Date: Mon, 6 Jun 1994 20:27:32 GMT
  1760. Organization: The World Public Access UNIX, Brookline, MA
  1761.  
  1762. breger@netcom.com (Ron Breger) writes:
  1763. >Frank Manshande (frankm@and.nl) wrote:
  1764. >: Hi,
  1765. >: I have a question concerning playing QuickTime movies.
  1766. >: What I want is to store the movie (data) into the datafork at
  1767. >: a specific offset (for example at offset 3000), and later play
  1768. >: that movie from that offset. This way I can put more than one
  1769. >: QuickTime movie into one file and play a movie at a specific
  1770. >: offset.
  1771.  
  1772. FlattenMovieData to a temp file, then copy the data over, using
  1773. SetMediaDataRef to repoint all the medias in the movie to the new file.
  1774.  
  1775. >I am having the same problem, but I am using handles.
  1776. >This is something that I'm trying to do:
  1777.  
  1778. >// save the moive
  1779. >PutMoiveIntoHandle()
  1780. >AddResource(publicMoive, 'MRES', 1000, "");
  1781. >ReleaseResource(publicMovie);
  1782.  
  1783. This would work in theory; however, you should do a WriteResource
  1784. before you do a ReleaseResource. Is there a reason why you're not using
  1785. Add/UpdateMovieResource, however?
  1786.  
  1787. >then
  1788.  
  1789. >// play the movie
  1790. >publicMovie = GetResource('MRES',1000);
  1791. >DetachResource(publicMoive);
  1792. >StartMoive(publicMoive);
  1793.  
  1794. This will *not* work. You'd have to do:
  1795.     myMovie = NewMovieFromHandle(publicMovie);
  1796.  
  1797. >I would like to have one (resource) file to contain many movies.
  1798.  
  1799. Perfectly feasible with Add/UpdateMovieResource, since you can specify
  1800. the resID, as well as scan the movie res file for 'moov' resources.
  1801.  
  1802. >I don't want to use MovieFiles.
  1803.  
  1804. Why? Are there limitations you see in using them?
  1805.  
  1806. >  I would like the data
  1807. >to be in a resource and not contain any references to
  1808. >the original files.  Is this possible?
  1809.  
  1810. Nope. The movie *data* must be in a data fork. It *is* possible for the
  1811. file to be completely self-contained (ie all the movie data would be in
  1812. the data fork of the file that contains the movie resources), however.
  1813.  
  1814. -Ivan
  1815. - -
  1816. Ivan Cavero Belaunde (ivanski@world.std.com)
  1817. Avid VideoShop Project Lead
  1818. Avid Technology, Inc.
  1819.  
  1820. +++++++++++++++++++++++++++
  1821.  
  1822. >From Frank Manshande <frankm@and.nl>
  1823. Date: Tue, 7 Jun 1994 07:29:44 GMT
  1824. Organization: AND Software BV
  1825.  
  1826. In article <Cqzstw.BqE@world.std.com> Ivan M CaveroBelaunde,
  1827. ivanski@world.std.com writes:
  1828. >FlattenMovieData to a temp file, then copy the data over, using
  1829. >SetMediaDataRef to repoint all the medias in the movie to the new file.
  1830. >
  1831.  
  1832. I'm reading IM-QuickTime right now, but I can't seem to find how I can
  1833. play a movie from a specific offset. If I succeed in saving the movie
  1834. the way you describe, using SetMediaDataRef for all the tracks, how can
  1835. I then play that movie. And would that also work under QuickTime for
  1836. Windows?
  1837.  
  1838. Thanks for your time!
  1839.  
  1840. Frank Manshande
  1841. frankm@and.nl
  1842.  
  1843. +++++++++++++++++++++++++++
  1844.  
  1845. >From ivanski@world.std.com (Ivan M CaveroBelaunde)
  1846. Date: Tue, 7 Jun 1994 13:50:44 GMT
  1847. Organization: The World Public Access UNIX, Brookline, MA
  1848.  
  1849. Frank Manshande <frankm@and.nl> writes:
  1850.  
  1851. >In article <Cqzstw.BqE@world.std.com> Ivan M CaveroBelaunde,
  1852. >ivanski@world.std.com writes:
  1853. >>FlattenMovieData to a temp file, then copy the data over, using
  1854. >>SetMediaDataRef to repoint all the medias in the movie to the new file.
  1855. >>
  1856.  
  1857. >I'm reading IM-QuickTime right now, but I can't seem to find how I can
  1858. >play a movie from a specific offset. If I succeed in saving the movie
  1859. >the way you describe, using SetMediaDataRef for all the tracks, how can
  1860. >I then play that movie. And would that also work under QuickTime for
  1861. >Windows?
  1862.  
  1863. The way you would play that movie is that you would, in that same file,
  1864. store multiple movie resources for each of the movies stored at different
  1865. offsets using Add/UpdateMovieResource. Then you can just do
  1866. NewMovieFromFile/FromHandle and play whichever one you want.
  1867.  
  1868. This does *not* work at all under QuickTime for Windows, since QTW
  1869. uses data-fork only movies. Since df movies are defined to contain
  1870. its "movie resource" at the end of the data stream, you can only
  1871. have *one* movie per file, unlike the flexibility you have when you
  1872. use moov resources.
  1873.  
  1874. QTW has a number of other limitations you might want to read up on. I don't
  1875. remember them off the top of my head, but, for exmaple, I don't believe
  1876. multitrack or multifile (dependent file) support is in there yet - you're
  1877. limited to comlletely self-contained movies with at most 1 video track and
  1878. 1 audio track.
  1879.  
  1880. -Ivan
  1881. - -
  1882. Ivan Cavero Belaunde (ivanski@world.std.com)
  1883. Avid VideoShop Project Lead
  1884. Avid Technology, Inc.
  1885.  
  1886. +++++++++++++++++++++++++++
  1887.  
  1888. >From breger@netcom.com (Ron Breger)
  1889. Date: Wed, 8 Jun 1994 15:39:47 GMT
  1890. Organization: Netcom
  1891.  
  1892. : >I am having the same problem, but I am using handles.
  1893. : >This is something that I'm trying to do:
  1894.  
  1895. : >// save the moive
  1896. : >PutMoiveIntoHandle()
  1897. : >AddResource(publicMoive, 'MRES', 1000, "");
  1898. : >ReleaseResource(publicMovie);
  1899.  I did the WriteResource.
  1900.  
  1901.  
  1902. : This would work in theory; however, you should do a WriteResource
  1903. : before you do a ReleaseResource. Is there a reason why you're not using
  1904. : Add/UpdateMovieResource, however?
  1905.  
  1906. : >then
  1907.  
  1908. : >// play the movie
  1909. : >publicMovie = GetResource('MRES',1000);
  1910. : >DetachResource(publicMoive);
  1911. : >StartMoive(publicMoive);
  1912.  
  1913. : This will *not* work. You'd have to do:
  1914. :     myMovie = NewMovieFromHandle(publicMovie);
  1915.  
  1916. Yes, I am doing the NewMovieFromHandle.
  1917.  
  1918. : Perfectly feasible with Add/UpdateMovieResource, since you can specify
  1919. : the resID, as well as scan the movie res file for 'moov' resources.
  1920.  
  1921. : >I don't want to use MovieFiles.
  1922.  
  1923. : Why? Are there limitations you see in using them?
  1924.  
  1925. I want to use my own resources instead of MovieFiles, so that I can
  1926. put all the movies in regular resource files and use ResEdit to copy
  1927. and paste the movies I need.  Also, I would like to have my application
  1928. contain all the resources it needs and not have it depend on any
  1929. other files.  
  1930.  
  1931. I am planning of using QuickTime 2.0 that supports Music (MIDI) and
  1932. would like to have all of the Movies be in the resource fork of the 
  1933. application.  I find it very convienient to be able to use ResEdit
  1934. to copy/paste resources around.  So, I was trying to have a movie
  1935. be self-contained, storing the movie as a resource, and reading it
  1936. back in using GetResource() and NewMoiveFromHandle(), but have been
  1937. unsuccessful.  I still am a little confused why this doesn't work:
  1938.  
  1939. AddResource(publicMoive, 'MRES', 1000, "");
  1940. WriteResource(publicMovie);
  1941. ReleaseResource(publicMovie);
  1942.  
  1943. [I don't want to use AddMoiveResource(), as I don't want to use
  1944. MoiveFiles().  I want all the data to be in one resource and not use
  1945. the data fork.  That way, I can use ResEdit to eaisly copy/paste 
  1946. movies around.  This is what I do with my 'snd ' resources!] 
  1947.  
  1948. then
  1949.  
  1950. // play the movie
  1951. publicMovie = GetResource('MRES',1000);
  1952. DetachResource(publicMoive);
  1953. NewMovieFromHandle(&theMovie, publicMovie);
  1954. StartMoive(theMoive);
  1955.  
  1956. Thanks for all your help.
  1957. -- 
  1958. =====================================================================
  1959. Ron Breger         
  1960. breger@netcom.com                              AppleLink: RON.BREGER
  1961. =====================================================================
  1962.  
  1963. +++++++++++++++++++++++++++
  1964.  
  1965. >From jywang@apple.com (John Wang)
  1966. Date: 9 Jun 1994 21:37:17 GMT
  1967. Organization: Apple Computer, Inc.
  1968.  
  1969. There are two parts to a movie.  1) the movie data atom.  2) the movie
  1970. resource atom.  The movie data atom is always in the data fork.   However,
  1971. the movie resource atom can be stored in either the resource fork or the
  1972. data fork.  If the movie resource atom is stored in the resource fork, it
  1973. is very easy to randomly access the many atoms that you might have stored
  1974. in individual resources.  But, if you want your movies to be cross-platform
  1975. compatible, then you'll want to stored the movie resource atoms in the data
  1976. fork.
  1977.  
  1978. To store the movie data atom into a file, you must call either FlattenMovie
  1979. or FlattenMovieData.  The difference between FlattenMovie and FlattenMovie
  1980. is that FlattenMovie also adds the movie resource atom to the resource
  1981. fork.  Therefore, you'll want to call FlattenMovieData if you don't want to
  1982. add a movie resource atom to the resource fork.  Instead, in either call,
  1983. you can use the flag, flattenAddMovieToDataFork.  This will add the movie
  1984. resource atom to the data fork.
  1985.  
  1986. For a more complete discussion of this topic, please read my column on
  1987. "Movie Files" in issue #16 of develop magazine (an Apple publication).
  1988.  
  1989. John Wang
  1990.  
  1991. In article <bregerCqzLIx.GEp@netcom.com>, breger@netcom.com (Ron Breger)
  1992. wrote:
  1993.  
  1994. > Frank Manshande (frankm@and.nl) wrote:
  1995. > : Hi,
  1996. > : I have a question concerning playing QuickTime movies.
  1997. > : What I want is to store the movie (data) into the datafork at
  1998. > : a specific offset (for example at offset 3000), and later play
  1999. > : that movie from that offset. This way I can put more than one
  2000. > : QuickTime movie into one file and play a movie at a specific
  2001. > : offset.
  2002. > : The call "PutMovieIntoDataFork" only seems to store the movie
  2003. > : structure, and not the movie data, into a file at the specified
  2004. > : offset. This way the PutMovieIntoDataFork call creates a file
  2005. > : of about 1,5 KB which only contains a reference to the original
  2006. > : movie data file.
  2007. > I am having the same problem, but I am using handles.
  2008. > This is something that I'm trying to do:
  2009. > // save the moive
  2010. > PutMoiveIntoHandle()
  2011. > AddResource(publicMoive, 'MRES', 1000, "");
  2012. > ReleaseResource(publicMovie);
  2013. > then
  2014. > // play the movie
  2015. > publicMovie = GetResource('MRES',1000);
  2016. > DetachResource(publicMoive);
  2017. > StartMoive(publicMoive);
  2018. > I would like to have one (resource) file to contain many movies.
  2019. > I don't want to use MovieFiles.  I would like the data
  2020. > to be in a resource and not contain any references to
  2021. > the original files.  Is this possible?
  2022. > Please help.  (email or post).
  2023. > Thanks.
  2024. > Ron Breger
  2025. > -- 
  2026. > =====================================================================
  2027. > Ron Breger         
  2028. > breger@netcom.com                              AppleLink: RON.BREGER
  2029. > =====================================================================
  2030.  
  2031. +++++++++++++++++++++++++++
  2032.  
  2033. >From ivanski@world.std.com (Ivan M CaveroBelaunde)
  2034. Date: Mon, 13 Jun 1994 21:56:13 GMT
  2035. Organization: The World Public Access UNIX, Brookline, MA
  2036.  
  2037. breger@netcom.com (Ron Breger) writes:
  2038. >I want to use my own resources instead of MovieFiles, so that I can
  2039. >put all the movies in regular resource files and use ResEdit to copy
  2040. >and paste the movies I need.  Also, I would like to have my application
  2041. >contain all the resources it needs and not have it depend on any
  2042. >other files.  
  2043.  
  2044. QT usually *needs* to store movie data in the data fork of files. QT2
  2045. introduces a "handle data handler," which allows you to create movies
  2046. that are held entirely in memory. (Maynard Handley will like this...)
  2047. The twist is, of course, that you have to save them yourself somehow
  2048. (the movie user data could be the place for it).
  2049.  
  2050. So the movie creation process goes as follows:
  2051.   - Create the movie the usual way, putting the data in the data fork.
  2052.   - After you're done, make a copy of the movie by copying each
  2053.      track by hand (using InsertTrackSegment). However, on the
  2054.      copied movie, when you create the media, specify that you're
  2055.      using the handle data handler instead of the alias data
  2056.      handler. This will create an in-memory copy of the
  2057.      movie data.
  2058.   - Save the handles where the data is sitting in the movie's user
  2059.      data using AddUserData.
  2060.   - Do the PutMovieIntoHandle, etc, stuff and save the movie as a
  2061.      resource.
  2062.  
  2063. Once you've done that once, you can load the movie by doing the following:
  2064.   - GetResource()
  2065.   - NewMovieFromHandle()
  2066.   - GetMovieUserData()
  2067.   - For every track in this movie, if the media type is 'hndl',
  2068.          use the SetMediaDataRef call to "repoint" the media
  2069.          to the handle from GetMovieUserData.
  2070.  
  2071. Although I haven't tried this specifically, I've used all of these calls
  2072. at one time or another, so it should work.
  2073.  
  2074. The downside to this trick is that you end up with two copies of the
  2075. data in memory, which for large movies would be a serious issue.
  2076. That can be addressed by putting the data handle in a separate resource
  2077. instead of the user data, but the drawback there is that you must
  2078. copy two resources around, which might or might not be a big deal.
  2079. You could still use the movie user data to specify the res type and id
  2080. where the data is stored.
  2081.  
  2082. Hope this helps,
  2083.  
  2084. -Ivan
  2085. - -
  2086. Ivan Cavero Belaunde (ivanski@world.std.com)
  2087. Avid VideoShop Project Lead
  2088. Avid Technology, Inc.
  2089. #include <std.disclaimer.h>
  2090.  
  2091. ---------------------------
  2092.  
  2093. >From nagle@netcom.com (John Nagle)
  2094. Subject: Quickdraw GX - Why?
  2095. Date: Mon, 30 May 1994 03:46:07 GMT
  2096. Organization: NETCOM On-line Communication Services (408 261-4700 guest)
  2097.  
  2098.       Well, we now have Quickdraw GX, which is a 2D object-oriented
  2099. graphics system.  This is nice, but does it solve a real problem?
  2100. It's not a full 3D system, so you can't use it for 3D graphics.
  2101. It's not compatible with existing object-oriented graphics standards, 
  2102. like X or PHIGS.  It's complicated; several volume of manuals are required.
  2103. Rescalable icons are nice, but Quickdraw GX seems overkill just to
  2104. achieve that.  What kind of application would be simpler if written to use
  2105. Quickdraw GX?  
  2106.  
  2107.                     John Nagle
  2108.  
  2109. +++++++++++++++++++++++++++
  2110.  
  2111. >From opstad@apple.com (David Opstad)
  2112. Date: 29 May 1994 22:01:29 -0700
  2113. Organization: Apple Computer Inc, Cupertino, CA
  2114.  
  2115. In article <nagleCqLJsw.MvI@netcom.com>, John Nagle <nagle@netcom.com> wrote:
  2116. >      Well, we now have Quickdraw GX, which is a 2D object-oriented
  2117. >graphics system.  This is nice, but does it solve a real problem?
  2118. >It's not a full 3D system, so you can't use it for 3D graphics.
  2119. >It's not compatible with existing object-oriented graphics standards, 
  2120. >like X or PHIGS.  It's complicated; several volume of manuals are required.
  2121. >Rescalable icons are nice, but Quickdraw GX seems overkill just to
  2122. >achieve that.  What kind of application would be simpler if written to use
  2123. >Quickdraw GX?  
  2124.  
  2125. A word processing or page layout app would be much simpler using GX, since the
  2126. typographic expressiveness built into GX is very great. An application that
  2127. wishes to print to multiple kinds of paper in the same job (portrait and
  2128. landscape, say, or throw in an envelope too) has an easy road using GX printing.
  2129. Printing transfer modes (including to PostScript (TM) printers) that you
  2130. couldn't used to print is now possible with GX. Having pictures that are both
  2131. parsable and able to themselves contain pictures makes for much easier handling
  2132. of whole trees of image data to be rendered. And so on...
  2133.  
  2134. GX definitely isn't just for 2D graphics. Of course, your points about 3D are
  2135. well-taken, but that wasn't the problem that GX was intended to solve. For
  2136. years, developers for apps on the Mac have had to put up with a lot of quirks
  2137. in the way that QuickDraw forced them to deal with device-dependent graphics,
  2138. and with printing that also had its share of strange hackishness. GX finally
  2139. fixes many of these problems.
  2140.  
  2141. Dave Opstad
  2142. GX Line Layout Weenie
  2143.  
  2144. +++++++++++++++++++++++++++
  2145.  
  2146. >From d88-jwa@dront.nada.kth.se (Jon Wätte)
  2147. Date: 30 May 1994 07:43:14 GMT
  2148. Organization: The Royal Institute of Technology
  2149.  
  2150. In <nagleCqLJsw.MvI@netcom.com> nagle@netcom.com (John Nagle) writes:
  2151.  
  2152. >      Well, we now have Quickdraw GX, which is a 2D object-oriented
  2153. >graphics system.  This is nice, but does it solve a real problem?
  2154.  
  2155. Yes.
  2156.  
  2157. >It's not compatible with existing object-oriented graphics standards, 
  2158. >like X or PHIGS.
  2159.  
  2160. 1) X is not object oriented; it's QuickDraw where the bottlenecks
  2161.    go through a network driver.
  2162. 2) PHIGS is a 3D library.
  2163.  
  2164. >It's complicated; several volume of manuals are required.
  2165.  
  2166. Would you rahter it was less capable? The documentation for QDGX is
  2167. quite good to my meaning, what's missing is a lot of sample code (there
  2168. is some at least) and support in our frameworks of choise.
  2169.  
  2170. >Rescalable icons are nice, but Quickdraw GX seems overkill just to
  2171. >achieve that.  What kind of application would be simpler if written to use
  2172. >Quickdraw GX?  
  2173.  
  2174. QuickDraw GX printing is not a, but SEVERAL steps up, and re-defines
  2175. desktop printing. It shoots Apple ahead of the competition.
  2176.  
  2177. The GX imaging model has several things going for it, both in simplicity
  2178. and capability. You can write a capable draw program with much less effort
  2179. than before. You can expect to see shareware programs going after the
  2180. Illustrator and FreeHand crowd!
  2181.  
  2182. It's also _much_more_capable_ with ligatures, special forms and kerning
  2183. handled automatically, as well as providing very good typographic control
  2184. ("Gunk" and "Funk" axes, anyone? :-)
  2185.  
  2186. If you can't see the use of this to create more beautiful documents,
  2187. you're positioned where one-font-only people were in the middle of
  2188. the 80s.
  2189.  
  2190. Cheers,
  2191.  
  2192.                     / h+
  2193. -- 
  2194.  -- Jon W{tte, h+@nada.kth.se, Mac Software Engineer Deluxe --
  2195.  Engineering: "How will this work?" Science: "Why will this work?" Management:
  2196.  "When will this work?"  Liberal Arts: "Do you want fries with that?"
  2197.                      -- Jesse N. Schell
  2198.  
  2199. +++++++++++++++++++++++++++
  2200.  
  2201. >From dank@alumni.caltech.edu (Daniel R. Kegel)
  2202. Date: 30 May 1994 07:55:28 GMT
  2203. Organization: California Institute of Technology, Pasadena
  2204.  
  2205. In article <nagleCqLJsw.MvI@netcom.com>, John Nagle <nagle@netcom.com> wrote:
  2206. >      Well, we now have Quickdraw GX, which is a 2D object-oriented
  2207. >graphics system.  This is nice, but does it solve a real problem?
  2208.  
  2209. Quickdraw GX supports Unicode, which means that software
  2210. will be easier to internationalize.  Although the application developer
  2211. still needs to worry about different character sets when talking to
  2212. the outside world, inside everything can be Unicode.  This makes document
  2213. exchange and maintenance easier in a multilingual environment.
  2214. - Dan
  2215.  
  2216. +++++++++++++++++++++++++++
  2217.  
  2218. >From peirce@outpost.SF-Bay.org (Michael Peirce)
  2219. Date: Mon, 30 May 94 09:58:47 PST
  2220. Organization: Peirce Software, Inc.
  2221.  
  2222.  
  2223. In article <nagleCqLJsw.MvI@netcom.com> (comp.sys.mac.programmer), nagle@netcom.com (John Nagle) writes:
  2224. >       Well, we now have Quickdraw GX, which is a 2D object-oriented
  2225. > graphics system.  This is nice, but does it solve a real problem?
  2226. > It's not a full 3D system, so you can't use it for 3D graphics.
  2227. > It's not compatible with existing object-oriented graphics standards, 
  2228. > like X or PHIGS.  It's complicated; several volume of manuals are required.
  2229. > Rescalable icons are nice, but Quickdraw GX seems overkill just to
  2230. > achieve that.  What kind of application would be simpler if written to use
  2231. > Quickdraw GX?  
  2232.  
  2233. For me the two most important parts of QuickDraw GX aren't specific
  2234. to it's graphics engine: Typography and Printing.
  2235.  
  2236. QuickDraw GX typography brings truly great type handling to "normal"
  2237. programs with the line layout manager.  No longer will this be limited
  2238. to page layout programs.  Related is the new font technology: support
  2239. for TrueType GX and Type 1 multi master fonts.  These fonts allow
  2240. for smarts to be put directly into the font to do things that wasn't
  2241. possible before.
  2242.  
  2243. QuickDraw GX printing finally remakes the printing user interface.
  2244. Switching printers at print dialog time, desktop printers that allow
  2245. users to move a print job from one printer to another, and much better
  2246. support for paper types are just three examples of making the printing
  2247. experience for the user much simplier, yet more powerful.
  2248.  
  2249. Another key benefit for users is that GX pictures don't have any of
  2250. the horrible 72-dpi problems that you run into with PICTs.  And Portable
  2251. Digital Documents extend this idea so that a user can create a PPD
  2252. and not wworry about not having the right font if they try to print
  2253. or view it on another system.
  2254.  
  2255. I could go on, but you get my drift.
  2256.  
  2257. __ Michael Peirce        __ peirce@outpost.sf-bay.org
  2258. __ Peirce Software, Inc. __ 719 Hibiscus Place, Suite 301
  2259. __                       __ San Jose, California USA 95117-1844
  2260. __ Makers of: Smoothie & __ voice: +1.408.244.6554 fax: +1.408.244.6882
  2261. __    Peirce Print Tools __ AppleLink: peirce & AOL: AFC Peirce
  2262.  
  2263. +++++++++++++++++++++++++++
  2264.  
  2265. >From usenet@lowry.eche.ualberta.ca (Brian Lowry)
  2266. Date: 30 May 1994 21:05:13 GMT
  2267. Organization: Dept. of Chemical Eng., University of Alberta
  2268.  
  2269. In article <nagleCqLJsw.MvI@netcom.com>, nagle@netcom.com (John Nagle)
  2270. wrote:
  2271.  
  2272. >       Well, we now have Quickdraw GX, which is a 2D object-oriented
  2273. > graphics system.  This is nice, but does it solve a real problem?
  2274.  
  2275.   Yes, by expressing coordinates as fixed point numbers instead of
  2276. integers.  That alone is enough to recommend it.
  2277.  
  2278. -- 
  2279.  
  2280. Brian Lowry
  2281.  
  2282. +++++++++++++++++++++++++++
  2283.  
  2284. >From AppleGG@lamg.com (Gordon Apple)
  2285. Date: 30 May 1994 21:54:19 -0000
  2286. Organization: Los Angeles Macintosh Group BBS
  2287.  
  2288. > Yes, by expressing coordinates as fixed point numbers instead of
  2289. >integers.  That alone is enough to recommend it.
  2290.  
  2291.  
  2292.      I think it's ironic that Quickdraw GX went to such lengths (i.e.,
  2293. "Fixed" format) to avoid floating point operations, and is being released
  2294. almost simultaneously with the switch to PowerPC processors that run blazing
  2295. fast floating point that would have been faster than using "Fixed".
  2296.  
  2297. +++++++++++++++++++++++++++
  2298.  
  2299. >From dowdy@apple.com (Tom Dowdy)
  2300. Date: Tue, 31 May 1994 17:06:52 GMT
  2301. Organization: Apple Computer, Inc.
  2302.  
  2303. In article <CNjbKKKX.0uqam3@outpost.SF-Bay.org>, peirce@outpost.SF-Bay.org
  2304. (Michael Peirce) wrote:
  2305.  
  2306. > In article <nagleCqLJsw.MvI@netcom.com> (comp.sys.mac.programmer), nagle@netcom.com (John Nagle) writes:
  2307. > >       Well, we now have Quickdraw GX, which is a 2D object-oriented
  2308. > > graphics system.  This is nice, but does it solve a real problem?
  2309. > > It's not a full 3D system, so you can't use it for 3D graphics.
  2310. > > It's not compatible with existing object-oriented graphics standards, 
  2311. > > like X or PHIGS.  It's complicated; several volume of manuals are required.
  2312. > > Rescalable icons are nice, but Quickdraw GX seems overkill just to
  2313. > > achieve that.  What kind of application would be simpler if written to use
  2314. > > Quickdraw GX?  
  2315. > For me the two most important parts of QuickDraw GX aren't specific
  2316. > to it's graphics engine: Typography and Printing.
  2317.  
  2318. Michael mentions several nice things about these two areas, and
  2319. one nice thing about graphics (the no-72 dpi picture thingie).
  2320.  
  2321. I'd like to mention several other "nice graphics thingies" just
  2322. to give that part of GX even time.
  2323.  
  2324.  - rotation of all objects (everyone asks, so I call it out)
  2325.  
  2326.  - 3X3 transformation matricies (including perspective)
  2327.  
  2328.  - area, length, and other geometric information routines
  2329.  
  2330.  - full geometry engine, letting you hit test, subdivide, and
  2331.    intersect (via any boolean operator that makes sense) any two
  2332.    shapes and get a device-independant GEOMETRY out the other side.
  2333.    No other general purpose graphics system has this, and it lets you
  2334.    do some excellent things, such as creating shapes from other
  2335.    shapes in a drawing package.  (I personally think this area
  2336.    is very exciting, as I'd love to be able to SUBTRACT from
  2337.    one shape to create masks and such).
  2338.  
  2339.  - VERY powerful transfer mode functionality (and it all prints to
  2340.    everything, including PostScript).
  2341.  
  2342.  - device and space independant color, allowing you to create
  2343.    objects in any color space you feel comfortable with, and have
  2344.    the graphics system worry about the translation
  2345.  
  2346.  - curves
  2347.  
  2348.  - shape tagging, which lets you attach information or hints
  2349.    that are of use to either you or the system to shapes and pictures.
  2350.    (and also lets us extend GX in the future without the need to
  2351.    rev existing applications)
  2352.  
  2353.  - pictures can be "walked" or edited without the need to replay them
  2354.    to do so.
  2355.  
  2356. GX is lots of books.  But the API is really well thought out, and
  2357. once you start using it, you'll find that most API calls make sense
  2358. and you can figure them out by "guessing" the name.  
  2359.  
  2360. ob funny: when the PrintShop first started working with the GX graphics
  2361. system, we liked to "make up" fake API calls by combining the logical
  2362. flow of the API into nonsense API calls that sounded useful:
  2363.  GXGetTransformViewPortMappingStyle()
  2364.  GXSetMappingInk()
  2365.  
  2366.  
  2367. -- 
  2368.  Tom Dowdy                  Internet: dowdy@apple.COM
  2369.  Apple Computer MS:302-3KS  UUCP: {sun,voder,amdahl,decwrl}!apple!dowdy
  2370.  1 Infinite Loop            AppleLink: DOWDY1
  2371.  Cupertino, CA 95014       
  2372.  "The 'Ooh-Ah' Bird is so called because it lays square eggs."
  2373.  
  2374. +++++++++++++++++++++++++++
  2375.  
  2376. >From dowdy@apple.com (Tom Dowdy)
  2377. Date: Tue, 31 May 1994 17:11:45 GMT
  2378. Organization: Apple Computer, Inc.
  2379.  
  2380. In article <2sbrv9$t5f@apple.com>, opstad@apple.com (David Opstad) wrote:
  2381.  
  2382. > In article <nagleCqLJsw.MvI@netcom.com>, John Nagle <nagle@netcom.com> wrote:
  2383. > >      Well, we now have Quickdraw GX, which is a 2D object-oriented
  2384. > >graphics system.  This is nice, but does it solve a real problem?
  2385. > >It's not a full 3D system, so you can't use it for 3D graphics.
  2386. > >It's not compatible with existing object-oriented graphics standards, 
  2387. > >like X or PHIGS.  It's complicated; several volume of manuals are required.
  2388. > >Rescalable icons are nice, but Quickdraw GX seems overkill just to
  2389. > >achieve that.  What kind of application would be simpler if written to use
  2390. > >Quickdraw GX?  
  2391. > A word processing or page layout app would be much simpler using GX, since the
  2392. > typographic expressiveness built into GX is very great. 
  2393.  
  2394. One thing Dave didn't mention is that at the WWDC during the type
  2395. demo we showed a sample application using GX and its rich text to create
  2396. page layouts.  The application does multiple collumns, wraps text
  2397. around objects (using the cool GX geometry engine), and flows across
  2398. multiple pages.  It prints (and we've used to it to create some
  2399. cool party invites here!), saves, and can handle custom page setups
  2400. (doesn't yet do multiple formats).
  2401.  
  2402. Except for all of the "app stuff" like clipboard, typing,
  2403. cut and paste, undo, etc -- it's pretty much fully functional.
  2404.  
  2405. It's 50K of compiled code.  Something I think is quite impressive --
  2406. and the savings comes from thinking in a GX world where the system
  2407. handles more of the work for you.
  2408.  
  2409. -- 
  2410.  Tom Dowdy                  Internet: dowdy@apple.COM
  2411.  Apple Computer MS:302-3KS  UUCP: {sun,voder,amdahl,decwrl}!apple!dowdy
  2412.  1 Infinite Loop            AppleLink: DOWDY1
  2413.  Cupertino, CA 95014       
  2414.  "The 'Ooh-Ah' Bird is so called because it lays square eggs."
  2415.  
  2416. +++++++++++++++++++++++++++
  2417.  
  2418. >From jwbaxter@olympus.net (John W. Baxter)
  2419. Date: Tue, 31 May 1994 13:02:27 -0700
  2420. Organization: Internet for the Olympic Peninsula
  2421.  
  2422. In article <dowdy-310594095217@17.202.68.12>, dowdy@apple.com (Tom Dowdy)
  2423. wrote:
  2424.  
  2425. > GX is lots of [Inside Macintosh} books.  But the API is really well thought
  2426. > out, and
  2427. > once you start using it, you'll find that most API calls make sense
  2428. > and you can figure them out by "guessing" the name.  
  2429.  
  2430. Tom...I fully agree.  You and friends did very well.
  2431.  
  2432. -- 
  2433. John Baxter    Port Ludlow, WA, USA  [West shore, Puget Sound]
  2434.    jwbaxter@pt.olympus.net
  2435.  
  2436. +++++++++++++++++++++++++++
  2437.  
  2438. >From Jens Alfke <jens_alfke@powertalk.apple.com>
  2439. Date: Tue, 31 May 1994 22:00:32 GMT
  2440. Organization: Apple Computer
  2441.  
  2442. John Nagle, nagle@netcom.com writes:
  2443. > What kind of application would be simpler if written to use
  2444. > Quickdraw GX?  
  2445.  
  2446. Any kind of illustration program a la Illustrator or FreeHand or Canvas. GX
  2447. makes it very easy to write such programs, since it does so much work for
  2448. you: not only does it support powerful graphics primitives like quadric
  2449. Beziers, fancy options like dashes and joins, and really sophisticated color
  2450. models, but it also makes it very easy to manipulate these objects.
  2451. Hit-testing any GX objects (including type) is mostly just a matter of one
  2452. call.
  2453.  
  2454. Whether the big guns like Aldubeus or Deneba will move over to GX is unclear;
  2455. after all, they've already got code to do most of this stuff. But remember
  2456. how after 32-bit QuickDraw appeared we started to get some good color paint
  2457. programs from smaller developers that were cheap and reasonably powerful for
  2458. mere mortals? That's because 32BQD made it so much easier to do offscreen
  2459. color graphics. I think GX will have the same effect on illustration and
  2460. typography software, since it makes it possible to do very powerful
  2461. PostScript-style (and more!) graphics without requiring you to write your own
  2462. rendering engine for display or build custom PostScript code for printing.
  2463.  
  2464. --Jens Alfke
  2465.   jens_alfke@powertalk              Rebel girl, rebel girl,
  2466.             .apple.com              Rebel girl you are the queen of my world
  2467.  
  2468. +++++++++++++++++++++++++++
  2469.  
  2470. >From 103t_english@west.cscwc.pima.edu
  2471. Date: 31 May 94 15:53:49 MST
  2472. Organization: (none)
  2473.  
  2474. In article <dowdy-310594100526@17.202.68.12>, dowdy@apple.com (Tom Dowdy) writes:
  2475. > One thing Dave didn't mention is that at the WWDC during the type
  2476. > demo we showed a sample application using GX and its rich text to create
  2477. > page layouts.  The application does multiple collumns, wraps text
  2478. > around objects (using the cool GX geometry engine), and flows across
  2479. > multiple pages.  It prints (and we've used to it to create some
  2480. > cool party invites here!), saves, and can handle custom page setups
  2481. > (doesn't yet do multiple formats).
  2482. > Except for all of the "app stuff" like clipboard, typing,
  2483. > cut and paste, undo, etc -- it's pretty much fully functional.
  2484. > It's 50K of compiled code.  Something I think is quite impressive --
  2485. > and the savings comes from thinking in a GX world where the system
  2486. > handles more of the work for you.
  2487.  
  2488. Is it available as sample source code or will it be?
  2489.  
  2490.  
  2491. Lawson
  2492.  
  2493. +++++++++++++++++++++++++++
  2494.  
  2495. >From 103t_english@west.cscwc.pima.edu
  2496. Date: 31 May 94 21:14:40 MST
  2497. Organization: (none)
  2498.  
  2499. In article <1994May31.220032.15476@gallant.apple.com>, Jens Alfke <jens_alfke@powertalk.apple.com> writes:
  2500. > John Nagle, nagle@netcom.com writes:
  2501. >> What kind of application would be simpler if written to use
  2502. >> Quickdraw GX?  
  2503. [snip]
  2504.  
  2505. > Whether the big guns like Aldubeus or Deneba will move over to GX is unclear;
  2506. > after all, they've already got code to do most of this stuff. But remember
  2507. > how after 32-bit QuickDraw appeared we started to get some good color paint
  2508. > programs from smaller developers that were cheap and reasonably powerful for
  2509. > mere mortals? That's because 32BQD made it so much easier to do offscreen
  2510. > color graphics. I think GX will have the same effect on illustration and
  2511. > typography software, since it makes it possible to do very powerful
  2512. > PostScript-style (and more!) graphics without requiring you to write your own
  2513. > rendering engine for display or build custom PostScript code for printing.
  2514. >     
  2515.  
  2516. I think that eventually even games will start making use of GX once it becomes
  2517. a standard on enough machines...
  2518.  
  2519. Will GX ship with 7.5 or later?
  2520.  
  2521.  
  2522.  
  2523. Lawson
  2524.  
  2525. +++++++++++++++++++++++++++
  2526.  
  2527. >From dank@alumni.caltech.edu (Daniel R. Kegel)
  2528. Date: 1 Jun 1994 05:45:46 GMT
  2529. Organization: California Institute of Technology, Pasadena
  2530.  
  2531. 103t_english@west.cscwc.pima.edu writes:
  2532. >I think that eventually even games will start making use of GX once it becomes
  2533. >a standard on enough machines...
  2534. Roger on that one.
  2535.  
  2536. >Will GX ship with 7.5 or later?
  2537. I hear it will ship with 7.5, but my info is a couple months old.
  2538.  
  2539. -Dan
  2540.  
  2541. +++++++++++++++++++++++++++
  2542.  
  2543. >From pd@world.std.com (Peter F Davis)
  2544. Date: Wed, 1 Jun 1994 14:24:02 GMT
  2545. Organization: The World @ Software Tool & Die
  2546.  
  2547. dowdy@apple.com (Tom Dowdy) writes:
  2548.     .
  2549.     .
  2550.     .
  2551.  
  2552. >I'd like to mention several other "nice graphics thingies" just
  2553. >to give that part of GX even time.
  2554.     .
  2555.     .
  2556.     .
  2557.  
  2558. > - curves
  2559.  
  2560. Actually, this is one of the things that really frustrates me about
  2561. GX.  Everyone else is using cubics.  Why did GX go with quadrics?
  2562.  
  2563. -pd
  2564. -- 
  2565. ===============================================================================
  2566.                 Peter Davis
  2567.  
  2568.          "Standardization is the opposite of innovation."
  2569.  
  2570. +++++++++++++++++++++++++++
  2571.  
  2572. >From Jens Alfke <jens_alfke@powertalk.apple.com>
  2573. Date: Wed, 1 Jun 1994 21:30:07 GMT
  2574. Organization: Apple Computer
  2575.  
  2576. Peter F Davis, pd@world.std.com writes:
  2577. > Actually, this is one of the things that really frustrates me about
  2578. > GX.  Everyone else is using cubics.  Why did GX go with quadrics?
  2579.  
  2580. (1) Quadrics are a lot faster to render, and to perform other operations on
  2581. (like intersection.)
  2582.  
  2583. (2) Cubics are mathematically intractable under some geometric operations.
  2584. For example, insetting or outsetting a shape made of cubics would result in
  2585. curves of degree 6; whereas insetting or outsetting quadrics just results in
  2586. new quadrics. This kind of ability is absolutely fundamental to GX's geometry
  2587. engine, where you can apply any kind of geometric operation to a shape and
  2588. end up with another shape. Note that in PostScript you cannot do this, which
  2589. makes some kinds of operations insanely difficult or impossible. (I once
  2590. worked at a font company and we wanted to apply operations like insetting or
  2591. outsetting to character outlines. What we had to do to implement this in
  2592. PostScript would curl your hair, and it didn't even work that well. With GX
  2593. it would have been trivial.)
  2594.  
  2595. (3) In practice, for drawing, quadrics are nearly as powerful as cubics. Most
  2596. of the kinds of shapes people actually draw in illustration programs can be
  2597. rendered with only a few more quadrics than you'd need cubics for. It turns
  2598. out the kind of cubics that _are_ really difficult to approximate as quadrics
  2599. are the really twisty, loopy ones that people learn very quickly not to use
  2600. in drawing.
  2601.  
  2602. Disclaimer: I don't work on GX. Most of this is based on what I've learned
  2603. over the years or have been told by people on the GX team.
  2604.  
  2605. --Jens Alfke
  2606.   jens_alfke@powertalk              Rebel girl, rebel girl,
  2607.             .apple.com              Rebel girl you are the queen of my world
  2608.  
  2609. +++++++++++++++++++++++++++
  2610.  
  2611. >From ldo@waikato.ac.nz (Lawrence D'Oliveiro, Waikato University)
  2612. Date: 2 Jun 94 17:27:53 +1200
  2613. Organization: University of Waikato, Hamilton, New Zealand
  2614.  
  2615. In article <nagleCqLJsw.MvI@netcom.com>, nagle@netcom.com (John Nagle) writes:
  2616. >       Well, we now have Quickdraw GX, which is a 2D object-oriented
  2617. > graphics system.  This is nice, but does it solve a real problem?
  2618.  
  2619. Absobloodylutely!
  2620.  
  2621. > It's not a full 3D system, so you can't use it for 3D graphics.
  2622. > It's not compatible with existing object-oriented graphics standards,
  2623. > like X or PHIGS.
  2624.  
  2625. I notice you didn't say "not compatible with existing _widespread_ object-
  2626. oriented graphics standards"...
  2627.  
  2628. >  It's complicated; several volume of manuals are required.
  2629.  
  2630. No it isn't! Add up all the volumes of QuickDraw and Printing Manager
  2631. documentation, including all the tech notes on printing hacks and the like.
  2632. Compare that to the size of the QuickDraw GX documentation. Now compare the
  2633. respective functionality you get. The GX API is a model of simplicity,
  2634. compared to all the accretions to QuickDraw that have accumulated over the
  2635. years.
  2636.  
  2637. > Rescalable icons are nice, but Quickdraw GX seems overkill just to
  2638. > achieve that.  What kind of application would be simpler if written to use
  2639. > Quickdraw GX?
  2640.  
  2641. ALL OF THEM!!! Other people have mentioned the typography and printing support.
  2642. Perhaps you aren't clear how much functionality GX gives you: In the
  2643. typography, you get much cleaner multilingual support than old QuickDraw is
  2644. capable of; contextual and alternate character forms; font variations
  2645. (what Adobe calls "multiple masters"); and automatic justification and kerning.
  2646.  
  2647. In the printing support, you get: anything you can draw, you can print! And
  2648. this applies to both PostScript and non-PostScript printers. You realize how
  2649. much of a breakthrough this is? All those times people have torn out their hair
  2650. over things coming out different on the printer compared to how they look on
  2651. the screen--all that goes away! And you get printer sharing and background
  2652. printing for *all* printers. And it is easier for third parties to develop
  2653. printer drivers. And it is easier still for other third parties to write
  2654. extensions that hook into the printing process in all kinds of useful ways
  2655. (such as Michael Peirce's "Peirce Print Tools").
  2656.  
  2657. And the graphics is pretty cool, too.
  2658.  
  2659. Look at it this way: when the original Macintosh came out in 1984, a lot of
  2660. people wondered why they would need the graphics and the text-graphics
  2661. integration, to do things that they were happily doing on typewriter-like
  2662. systems before. Nobody seriously asks that question any more. GX will similarly
  2663. raise people's expectations of what basic text and graphics handling is all
  2664. about.
  2665.  
  2666. The coming of the typewriter was a giant step backwards for the printed word,
  2667. and computers have only made things worse. The original Mac went a long way to
  2668. countering a lot of the pervasiveness of that "typewriter mentality". But with
  2669. QuickDraw GX, we can finally say that the computer is capable of enriching,
  2670. rather than retarding, the development of all that is best in typography, and
  2671. that the ghost of the typewriter has been well and truly laid to rest.
  2672. Long live type!
  2673.  
  2674. Lawrence D'Oliveiro                       fone: +64-7-856-2889
  2675. Info & Tech Services Division              fax: +64-7-838-4066
  2676. University of Waikato            electric mail: ldo@waikato.ac.nz
  2677. Hamilton, New Zealand    37^ 47' 26" S, 175^ 19' 7" E, GMT+12:00
  2678. A: OS/2 2.1, CD-i, and the Commodore Amiga.
  2679. Q: Name 3 products which have outsold Windows NT.
  2680.  
  2681. +++++++++++++++++++++++++++
  2682.  
  2683. >From ldo@waikato.ac.nz (Lawrence D'Oliveiro, Waikato University)
  2684. Date: 3 Jun 94 11:05:01 +1200
  2685. Organization: University of Waikato, Hamilton, New Zealand
  2686.  
  2687. In article <nagleCqLJsw.MvI@netcom.com>, nagle@netcom.com (John Nagle) writes:
  2688.  
  2689. > [GX is] complicated; several volume of manuals are required.
  2690.  
  2691. Just to prove that GX is not only powerful for dealing with complex things,
  2692. it's also easy to use for simple things, here's a couple of minimal, _complete_
  2693. demo programs for you to compare. (I compiled and ran both versions with
  2694. THINK C 6, so I know they work.)
  2695.  
  2696. First, the QuickDraw version:
  2697.  
  2698.     #include <QuickDraw.h>
  2699.  
  2700.     void main(void)
  2701.       {
  2702.     GrafPort MyPort;
  2703.  
  2704.     InitGraf(&qd.thePort);
  2705.     OpenPort(&MyPort);
  2706.     MoveTo(100, 100);
  2707.     DrawString("\pHello, World!");
  2708.     ClosePort(&MyPort);
  2709.       } /*main*/
  2710.  
  2711. Next, the QuickDraw GX version:
  2712.  
  2713.     #include <math types.h>
  2714.     #include <math routines.h>
  2715.     #include <graphics routines.h>
  2716.  
  2717.     void main(void)
  2718.       {
  2719.     gxPoint where = {IntToFixed(100), IntToFixed(100)};
  2720.     #define TheText "Hello, World!"
  2721.  
  2722.     GXDrawText(sizeof(TheText), (unsigned char *) TheText, &where);
  2723.       } /*main*/
  2724.  
  2725. Now, what do you think of their relative complexity?
  2726.  
  2727. Lawrence D'Oliveiro                       fone: +64-7-856-2889
  2728. Info & Tech Services Division              fax: +64-7-838-4066
  2729. University of Waikato            electric mail: ldo@waikato.ac.nz
  2730. Hamilton, New Zealand    37^ 47' 26" S, 175^ 19' 7" E, GMT+12:00
  2731. Please do not feed the vegetables.
  2732.  
  2733. +++++++++++++++++++++++++++
  2734.  
  2735. >From peirce@outpost.SF-Bay.org (Michael Peirce)
  2736. Date: Fri, 3 Jun 94 16:09:15 PST
  2737. Organization: Peirce Software, Inc.
  2738.  
  2739.  
  2740. In article <2smvne$mkg@news.kth.se> (comp.sys.mac.programmer), d88-jwa@dront.nada.kth.se (Jon Wätte) writes:
  2741. > >3. No stupid conversions and typecasting to remember all over the place.
  2742. > Okay, I buy that.
  2743.  
  2744. Personally I blame that on C.  C just doesn't have a "native"
  2745. fixed type with associated operations.
  2746.  
  2747. Also (very minor point) I use the ff() macro rather than the
  2748. IntToFixed() - they are equivalent, but ff is more compact.
  2749.  
  2750. I do wish there was a VALIDATE mode that would yell when it
  2751. started seeing coordinates like 0x00000001 rather than
  2752. 0x00010000.  Such tiny coordinates can't be common or generally
  2753. useful.
  2754.  
  2755. I have gotten into trouble by passing integer coordinates rather
  2756. than fixed coordinates, though they aren't hard bugs to figure
  2757. out.
  2758. ____________
  2759.  
  2760. My only real grip with GX is that the interface is opague.  I
  2761. understand the rational that they might/will change things
  2762. inside at a later date.  That's well and good, but it makes it
  2763. MUCH harder to debug. With old QuickDraw I could root around in
  2764. the debugger and see exactly what my visRegion was set to and
  2765. such.  With GX there is no way to see, for example, what my Ink
  2766. happens to be or my clip shape or whatever.
  2767.  
  2768. They supply GraphicsBug, but it's basically useless for the kind
  2769. of work I do (non-applications).  And it's a pretty aweful
  2770. interface even for app use - it makes Jasik look like an UI
  2771. god. [ 1/2 :-) ]  And it crashes all the time for me.
  2772.  
  2773. What I'd like to see is a way to peer inside.  Make it 100%
  2774. clear that things will change and all that, but allow us to
  2775. debug things in a reasonable way!
  2776.  
  2777. __ Michael Peirce        __ peirce@outpost.sf-bay.org
  2778. __ Peirce Software, Inc. __ 719 Hibiscus Place, Suite 301
  2779. __                       __ San Jose, California USA 95117-1844
  2780. __ Makers of: Smoothie & __ voice: +1.408.244.6554 fax: +1.408.244.6882
  2781. __    Peirce Print Tools __ AppleLink: peirce & AOL: AFC Peirce
  2782.  
  2783. +++++++++++++++++++++++++++
  2784.  
  2785. >From Rick Wong <rick@jessica.stanford.edu>
  2786. Date: 3 Jun 1994 23:06:32 GMT
  2787. Organization: Stanford University
  2788.  
  2789. In article <1994Jun3.093501.1@west.cscwc.pima.edu> ,
  2790. 103t_english@west.cscwc.pima.edu writes:
  2791. >Perhaps the sample source code to draw the same text a dozen times,
  2792. rotated by
  2793. >30 degrees each time in a loop?
  2794. >
  2795. >Takes only a few lines more than simply drawing the text in the first
  2796. place...
  2797. >
  2798. >
  2799. >Lawson
  2800.  
  2801.  
  2802. #include <math types.h>
  2803. #include <math routines.h>
  2804. #include <graphics routines.h>
  2805. #include <string.h>
  2806.  
  2807. #define TheText "GX Rules!"
  2808.  
  2809. void main(void)
  2810. {
  2811.     gxPoint myPoint = {ff(100), ff(100)};
  2812.     gxShape myTextShape = GXNewText(strlen(TheText), TheText, &myPoint);
  2813.     gxTransform myShapeTransform = GXGetShapeTransform(myTextShape);
  2814.     int i;
  2815.     for (i = 0; i < 12; ++i) {
  2816.         GXDrawShape(myTextShape);
  2817.         GXRotateTransform(myShapeTransform, ff(30), myPoint.x, myPoint.y);
  2818.     }
  2819.     GXDisposeShape(myTextShape);
  2820. }
  2821.  
  2822.  
  2823. Any sort of rotation operation (including bitmaps) is trivial with
  2824. QuickDraw GX.  This doesn't even nick the surface of its capabilities.
  2825.  
  2826. I am just starting to read the QD GX docs, and I must say that I am
  2827. quite impressed by the job Apple's done.  Not only is QD GX loaded
  2828. with great new features, the underlying model is indeed well thought
  2829. out, and the APIs are exemplary in their cleanness and consistency.
  2830. I'm going to enjoy forgetting everything I ever learned about PixMaps,
  2831. GDevices, cluts, etc.
  2832.  
  2833.  
  2834. Rick Wong
  2835.  
  2836. +++++++++++++++++++++++++++
  2837.  
  2838. >From sho@bohr.physics.purdue.edu (Sho Kuwamoto)
  2839. Date: 3 Jun 94 17:35:05 GMT
  2840. Organization: Purdue University Physics Department
  2841.  
  2842. ldo@waikato.ac.nz (Lawrence D'Oliveiro, Waikato University) writes:
  2843. >    #include <math types.h>
  2844. >    #include <math routines.h>
  2845. >    #include <graphics routines.h>
  2846. >
  2847. >    void main(void)
  2848. >      {
  2849. >    gxPoint where = {IntToFixed(100), IntToFixed(100)};
  2850. >    #define TheText "Hello, World!"
  2851. >
  2852. >    GXDrawText(sizeof(TheText), (unsigned char *) TheText, &where);
  2853. >      } /*main*/
  2854.  
  2855. One thing I'd like to see is a way to specify fixed point
  2856. constants from within the mac C compilers.  What?  Did I
  2857. hear you cry, "nonstandard"?  Well, what about four byte
  2858. chars (e.g., 'APPL')?  How standard are they?
  2859.  
  2860. I imagine being able to type 100F to represent a fixed point
  2861. 100 in much the same way that one types 100L to represent a
  2862. long int 100.  I realize it's grossly nonstandard, but
  2863. wouldn't it make GX so much easier?
  2864.  
  2865. -Sho
  2866. --
  2867. sho@physics.purdue.edu <<-- finger this account to find out what I'm
  2868.                             having for lunch!
  2869.  
  2870. <A HREF="http://physics.purdue.edu/~sho/homepage.html">Sho Kuwamoto</A>.
  2871.  
  2872. +++++++++++++++++++++++++++
  2873.  
  2874. >From blm@coho.halcyon.com (Brian L. Matthews)
  2875. Date: 4 Jun 1994 01:06:33 GMT
  2876. Organization: A World of Information at Your Fingertips
  2877.  
  2878. In article <16887@dirac.physics.purdue.edu>,
  2879. Sho Kuwamoto <sho@bohr.physics.purdue.edu> wrote:
  2880. |>    gxPoint where = {IntToFixed(100), IntToFixed(100)};
  2881. |
  2882. |One thing I'd like to see is a way to specify fixed point
  2883. |constants from within the mac C compilers.
  2884.  
  2885. Well, if you're willing to switch to C++, it would be fairly easy to
  2886. make some classes so you could just say:
  2887.  
  2888.     gxPoint where = { 100, 100 };
  2889.  
  2890. and the compiler (with the help of some classes you write) would do the
  2891. right thing.
  2892.  
  2893. One could also be clever and make it so:
  2894.  
  2895.     gxPoint where = { 10.53, 9.47 };
  2896.  
  2897. also does (usually) the right thing.  And all without modifying the language.
  2898.  
  2899. This would also fix problems with accidentally passing an int where Fixed
  2900. was expected.  With proper declarations, such a thing wouldn't be possible
  2901. (well, wouldn't be easy.  Anything's possible in C :-)).
  2902.  
  2903. Brian
  2904.  
  2905. +++++++++++++++++++++++++++
  2906.  
  2907. >From nagle@netcom.com (John Nagle)
  2908. Date: Sat, 4 Jun 1994 06:02:23 GMT
  2909. Organization: NETCOM On-line Communication Services (408 261-4700 guest)
  2910.  
  2911. sho@bohr.physics.purdue.edu (Sho Kuwamoto) writes:
  2912. >One thing I'd like to see is a way to specify fixed point
  2913. >constants from within the mac C compilers.  What?  Did I
  2914. >hear you cry, "nonstandard"?  Well, what about four byte
  2915. >chars (e.g., 'APPL')?  How standard are they?
  2916.  
  2917.       Actually, multicharacter constants are standard C and C++, although
  2918. they are a recent addition to the language.
  2919.  
  2920. >I imagine being able to type 100F to represent a fixed point
  2921. >100 in much the same way that one types 100L to represent a
  2922. >long int 100.  I realize it's grossly nonstandard, but
  2923. >wouldn't it make GX so much easier?
  2924.  
  2925.       Why build it into the language?  Just add the new type.
  2926.  
  2927.      class QDfixed {
  2928.     long fval;
  2929.      public:
  2930.     QDfixed(int intval) { fval = intval * int_scale_factor; }
  2931.     QDfixed(QDfixed fixedval) { fval = fixedval.fval; }
  2932.     QDfixed(int intval, int fractpart) { fval = intval * int_scale_factor
  2933.                     + fractpart; }
  2934.         ....
  2935.      }
  2936.  
  2937. You get the idea.
  2938. Of course, because the Mac interface is still defined in terms of C, not
  2939. C++, the standard headers won't support this properly, but that could be
  2940. fixed with some glue routines expressed as inlines.
  2941.  
  2942.                     John Nagle
  2943.  
  2944. +++++++++++++++++++++++++++
  2945.  
  2946. >From marke@infi.net (Mark Eaton)
  2947. Date: 4 Jun 1994 18:06:09 GMT
  2948. Organization: InfiNet
  2949.  
  2950. Ralph Martin (Ralph.Martin@cm.cf.ac.uk) wrote:
  2951. : In article <1994Jun3.110501.29244@waikato.ac.nz> Lawrence D'Oliveiro,
  2952. : ldo@waikato.ac.nz writes:
  2953. : >Next, the QuickDraw GX version:
  2954. : >
  2955. : >    #include <math types.h>
  2956. : >    #include <math routines.h>
  2957. : >    #include <graphics routines.h>
  2958. : >
  2959. : >    void main(void)
  2960. : >      {
  2961. : >    gxPoint where = {IntToFixed(100), IntToFixed(100)};
  2962. : >    #define TheText "Hello, World!"
  2963. : >
  2964. : >    GXDrawText(sizeof(TheText), (unsigned char *) TheText, &where);
  2965. : >      } /*main*/
  2966. : >
  2967. : >Now, what do you think of their relative complexity?
  2968.  
  2969. : It's not obvious:
  2970.  
  2971. : Good points for Quickdraw:
  2972. : 1. Less headers.
  2973.  
  2974. I wonder if compiler providers like Symantec and MetroWerks will come up
  2975. with a unified header for GX that includes the necessary headers... Its just
  2976. a matter of time.
  2977.  
  2978. : 2. Functionality divided into smaller chunks (what to draw, where to draw
  2979. : separate).
  2980.  
  2981. Yes, but now we arent restricted to one 'pen'. We can have any number of
  2982. points without having to call move and moveto constantly. I think the new
  2983. way is better.
  2984.  
  2985. : 3. No stupid conversions and typecasting to remember all over the place.
  2986.  
  2987. : Good points for Quickdraw GX:
  2988. : 4. No rubbish concerning initialising and setting up ports.
  2989.  
  2990. : Overall - the Quickdraw is easier to read, and looks more maintainable
  2991. : and less error prone because of point 3. It is probably easier to write
  2992. : given point 2, as the programmer has to concentrate on less things at
  2993. : once.
  2994.  
  2995. Had he used unsigned char* theText = "Hello World"; he wouldnt have needed a
  2996. cast. He used a numdefine instead... It was a programmer choice...
  2997.  
  2998. : Seriously, you are probably right about QuickDraw GX having a better
  2999. : model underlying it. I'm not so sure that the realisation of that model
  3000. : into an API is a great leap forward though. Perhaps longer examples would
  3001. : be more convincing!
  3002.  
  3003. : Ralph
  3004.  
  3005. --
  3006.  
  3007. -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  3008. Mark Eaton          | MacXPerts - Custom Mac and Newton Software
  3009. marke@infi.net      | 3228L W. Cary St.
  3010.                     | Richmond, VA. 23221
  3011.             | (804) 353-7122     FAX: (804) 358-3847
  3012.  
  3013. +++++++++++++++++++++++++++
  3014.  
  3015. >From marke@infi.net (Mark Eaton)
  3016. Date: 4 Jun 1994 18:11:20 GMT
  3017. Organization: InfiNet
  3018.  
  3019. Rick Wong (rick@jessica.stanford.edu) wrote:
  3020. : #define TheText "GX Rules!"
  3021.  
  3022. : void main(void)
  3023. : {
  3024. :     gxPoint myPoint = {ff(100), ff(100)};
  3025. :     gxShape myTextShape = GXNewText(strlen(TheText), TheText, &myPoint);
  3026.  
  3027. Its interesting that GX uses shapes and converts text to shapes. This is
  3028. very much like the Newton form of QuickDraw. Did some of the engineers work
  3029. on both, or is this just coincidence?
  3030.  
  3031. :     gxTransform myShapeTransform = GXGetShapeTransform(myTextShape);
  3032. :     int i;
  3033. :     for (i = 0; i < 12; ++i) {
  3034. :         GXDrawShape(myTextShape);
  3035. :         GXRotateTransform(myShapeTransform, ff(30), myPoint.x, myPoint.y);
  3036. :     }
  3037. :     GXDisposeShape(myTextShape);
  3038. : }
  3039.  
  3040.  
  3041. : Any sort of rotation operation (including bitmaps) is trivial with
  3042. : QuickDraw GX.  This doesn't even nick the surface of its capabilities.
  3043.  
  3044. : I am just starting to read the QD GX docs, and I must say that I am
  3045. : quite impressed by the job Apple's done.  Not only is QD GX loaded
  3046. : with great new features, the underlying model is indeed well thought
  3047. : out, and the APIs are exemplary in their cleanness and consistency.
  3048. : I'm going to enjoy forgetting everything I ever learned about PixMaps,
  3049. : GDevices, cluts, etc.
  3050.  
  3051. Much agreed!
  3052.  
  3053. : Rick Wong
  3054.  
  3055. --
  3056.  
  3057. -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  3058. Mark Eaton          | MacXPerts - Custom Mac and Newton Software
  3059. marke@infi.net      | 3228L W. Cary St.
  3060.                     | Richmond, VA. 23221
  3061.             | (804) 353-7122     FAX: (804) 358-3847
  3062.  
  3063. +++++++++++++++++++++++++++
  3064.  
  3065. >From ldo@waikato.ac.nz (Lawrence D'Oliveiro, Waikato University)
  3066. Date: 7 Jun 94 11:41:28 +1200
  3067. Organization: University of Waikato, Hamilton, New Zealand
  3068.  
  3069. In article <2sqfqh$l0r@lucy.infi.net>, marke@infi.net (Mark Eaton) writes:
  3070. >
  3071. > Had he used unsigned char* theText = "Hello World"; he wouldnt have needed a
  3072. > cast. He used a numdefine instead... It was a programmer choice...
  3073.  
  3074. Actually, it was my ignorance of C showing. :-}
  3075.  
  3076. Seriously, though, if unsigned char* theText = "Hello World" compiles without
  3077. needing a cast, while I needed a cast to pass the exact same literal to an
  3078. unsigned char* argument, isn't that an inconsisten-C?
  3079.  
  3080. Lawrence D'Oliveiro                       fone: +64-7-856-2889
  3081. Info & Tech Services Division              fax: +64-7-838-4066
  3082. University of Waikato            electric mail: ldo@waikato.ac.nz
  3083. Hamilton, New Zealand    37^ 47' 26" S, 175^ 19' 7" E, GMT+12:00
  3084.  
  3085. +++++++++++++++++++++++++++
  3086.  
  3087. >From ldo@waikato.ac.nz (Lawrence D'Oliveiro, Waikato University)
  3088. Date: 7 Jun 94 11:46:51 +1200
  3089. Organization: University of Waikato, Hamilton, New Zealand
  3090.  
  3091. In article <CNjbKKKX.1a1ha8@outpost.SF-Bay.org>, peirce@outpost.SF-Bay.org (Michael Peirce) writes:
  3092. >
  3093. > Also (very minor point) I use the ff() macro rather than the
  3094. > IntToFixed() - they are equivalent, but ff is more compact.
  3095.  
  3096. I deliberately used IntToFixed to try to make it clearer what was going on.
  3097.  
  3098. > What I'd like to see is a way to peer inside.  Make it 100%
  3099. > clear that things will change and all that, but allow us to
  3100. > debug things in a reasonable way!
  3101.  
  3102. There are some GX functions that provide such an escape, eg GXGetShapeStructure.
  3103. If you have a look at the source of SlideMaster that came with the beta 1
  3104. distribution, you can see an example of this in use (it makes a big difference
  3105. to the speed of the "Particles" animation!).
  3106.  
  3107. All you need is some documentation on how to use this, or, failing that, some
  3108. time spent poking around for yourself...
  3109.  
  3110. Lawrence D'Oliveiro                       fone: +64-7-856-2889
  3111. Info & Tech Services Division              fax: +64-7-838-4066
  3112. University of Waikato            electric mail: ldo@waikato.ac.nz
  3113. Hamilton, New Zealand    37^ 47' 26" S, 175^ 19' 7" E, GMT+12:00
  3114.  
  3115. +++++++++++++++++++++++++++
  3116.  
  3117. >From ldo@waikato.ac.nz (Lawrence D'Oliveiro, Waikato University)
  3118. Date: 7 Jun 94 12:02:22 +1200
  3119. Organization: University of Waikato, Hamilton, New Zealand
  3120.  
  3121. In article <1994Jun3.094115.17117@cm.cf.ac.uk>, Ralph Martin <Ralph.Martin@cm.cf.ac.uk> writes:
  3122. > In article <1994Jun3.110501.29244@waikato.ac.nz> Lawrence D'Oliveiro,
  3123. > ldo@waikato.ac.nz writes:
  3124. >>
  3125. >>Now, what do you think of their relative complexity?
  3126. >
  3127. > Good points for Quickdraw:
  3128. > 2. Functionality divided into smaller chunks (what to draw, where to draw
  3129. > separate).
  3130.  
  3131. Actually, this statement is more true of GX in general. My sample code was for
  3132. drawing text: consider equivalent code for drawing, say, polygons. (Do you want
  3133. me to inflict some on you?)
  3134.  
  3135. > 3. No stupid conversions and typecasting to remember all over the place.
  3136.  
  3137. I was using THINK C for communication purposes. Normally I use Modula-2.
  3138. Much less typecasting. :-)
  3139.  
  3140. Lawrence D'Oliveiro                       fone: +64-7-856-2889
  3141. Info & Tech Services Division              fax: +64-7-838-4066
  3142. University of Waikato            electric mail: ldo@waikato.ac.nz
  3143. Hamilton, New Zealand    37^ 47' 26" S, 175^ 19' 7" E, GMT+12:00
  3144.  
  3145. +++++++++++++++++++++++++++
  3146.  
  3147. >From ldo@waikato.ac.nz (Lawrence D'Oliveiro, Waikato University)
  3148. Date: 7 Jun 94 12:04:03 +1200
  3149. Organization: University of Waikato, Hamilton, New Zealand
  3150.  
  3151. In article <2smvne$mkg@news.kth.se>, d88-jwa@dront.nada.kth.se (Jon Wätte) writes:
  3152. > In <1994Jun3.094115.17117@cm.cf.ac.uk> Ralph Martin <Ralph.Martin@cm.cf.ac.uk> writes:
  3153. >
  3154. >>Good points for Quickdraw GX:
  3155. >>4. No rubbish concerning initialising and setting up ports.
  3156. >
  3157. > Actually, there is; Lawrence was cheating (or rather not using
  3158. > a relevant test case)
  3159.  
  3160. I wasn't cheating. The GX documentation says you can leave out all the client
  3161. setup if the defaults are adequate, and in this case, they were!
  3162.  
  3163. Lawrence D'Oliveiro                       fone: +64-7-856-2889
  3164. Info & Tech Services Division              fax: +64-7-838-4066
  3165. University of Waikato            electric mail: ldo@waikato.ac.nz
  3166. Hamilton, New Zealand    37^ 47' 26" S, 175^ 19' 7" E, GMT+12:00
  3167.  
  3168. +++++++++++++++++++++++++++
  3169.  
  3170. >From zstern@adobe.com (Zalman Stern)
  3171. Date: Tue, 7 Jun 1994 01:21:35 GMT
  3172. Organization: Adobe Systems Incorporated
  3173.  
  3174. Lawrence D'Oliveiro, Waikato University writes
  3175. > Seriously, though, if unsigned char* theText = "Hello World" compiles  
  3176. without
  3177. > needing a cast, while I needed a cast to pass the exact same literal to an
  3178. > unsigned char* argument, isn't that an inconsisten-C?
  3179.  
  3180. Its not an inconsistency because it doesn't compile.
  3181. --
  3182. Zalman Stern           zalman@adobe.com            (415) 962 3824
  3183. Adobe Systems, 1585 Charleston Rd., POB 7900, Mountain View, CA 94039-7900
  3184.    Never let a "final candidate" subscript get above the age of consent.
  3185.  
  3186. +++++++++++++++++++++++++++
  3187.  
  3188. >From peirce@outpost.SF-Bay.org (Michael Peirce)
  3189. Date: Mon, 6 Jun 94 20:25:05 PST
  3190. Organization: Peirce Software, Inc.
  3191.  
  3192.  
  3193. In article <1994Jun7.114651.29344@waikato.ac.nz> (comp.sys.mac.programmer), ldo@waikato.ac.nz (Lawrence D'Oliveiro, Waikato University) writes:
  3194. > In article <CNjbKKKX.1a1ha8@outpost.SF-Bay.org>, peirce@outpost.SF-Bay.org (Michael Peirce) writes:
  3195. > >
  3196. > > Also (very minor point) I use the ff() macro rather than the
  3197. > > IntToFixed() - they are equivalent, but ff is more compact.
  3198. > I deliberately used IntToFixed to try to make it clearer what was going on.
  3199. > > What I'd like to see is a way to peer inside.  Make it 100%
  3200. > > clear that things will change and all that, but allow us to
  3201. > > debug things in a reasonable way!
  3202. > There are some GX functions that provide such an escape, eg GXGetShapeStructure.
  3203.  
  3204. GXGetShapeStructure will return geometry information about a shape.
  3205. Other calls can also return infomation about other stuff like inks
  3206. and transforms.
  3207.  
  3208. With these it is possible to build some sort of debugging library
  3209. yourself, but it really doesn't help much when you are stepping through
  3210. source code and need to see what the ink of a given shape is or maybe
  3211. its transform.
  3212.  
  3213. GraphicsBug tries to address some of this, but it was clearly written
  3214. by someone that thinks Macsbug was a great model to follow for a debugger
  3215. UI :-(  It's completely unusable by folks who don't have a friendly event
  3216. loop handly.  People who write print drivers or extensions or even App
  3217. code that uses GX for just a little work, then cleans up before idle
  3218. time are left in a lurch.  I had to dust off some really old code
  3219. that spits out debugging information over the net to a log app so I can
  3220. get some idea what's going on deep in the bowels of message overrides.
  3221. This is code that I haven't had to use since symbolic debugging arrived
  3222. on the Mac many moons ago.
  3223.  
  3224. Maybe I'm carrying on at a bit too much length, but having spend the
  3225. last months debugging our printing extensions and I've wasted large
  3226. amounts of time because its hard to debug GX code.  (You also have
  3227. to jump through hoops to get source debugging to work with print drivers
  3228. and extensions, but that's yet another story!).
  3229.  
  3230. The easier it is to debug GX apps and such, the sooner they will start
  3231. showing up.
  3232.  
  3233. __ Michael Peirce        __ peirce@outpost.sf-bay.org
  3234. __ Peirce Software, Inc. __ 719 Hibiscus Place, Suite 301
  3235. __                       __ San Jose, California USA 95117-1844
  3236. __ Makers of: Smoothie & __ voice: +1.408.244.6554 fax: +1.408.244.6882
  3237. __    Peirce Print Tools __ AppleLink: peirce & AOL: AFC Peirce
  3238.  
  3239. +++++++++++++++++++++++++++
  3240.  
  3241. >From mxmora@unix.sri.com (Matt Mora)
  3242. Date: 7 Jun 1994 13:33:06 -0700
  3243. Organization: SRI International, Menlo Park, CA
  3244.  
  3245. In article <CNjbKKKX.1idl0m@outpost.SF-Bay.org> peirce@outpost.SF-Bay.org (Michael Peirce) writes:
  3246.  
  3247. >GraphicsBug tries to address some of this, but it was clearly written
  3248. >by someone that thinks Macsbug was a great model to follow for a debugger
  3249. >UI :-(  It's completely unusable by folks who don't have a friendly event
  3250. >loop handly.  People who write print drivers or extensions or even App
  3251.  
  3252.  
  3253. I thought that the GX team answered your question about that. Didn't
  3254. they mention that there is a call you can use to simulate a Event
  3255. loop?
  3256.  
  3257.  
  3258. Xavier
  3259.  
  3260.  
  3261.  
  3262.  
  3263.  
  3264. -- 
  3265. ___________________________________________________________
  3266. Matthew Xavier Mora                       Matt_Mora@sri.com
  3267. SRI International                       mxmora@unix.sri.com
  3268. 333 Ravenswood Ave                    Menlo Park, CA. 94025
  3269.  
  3270. +++++++++++++++++++++++++++
  3271.  
  3272. >From peirce@outpost.SF-Bay.org (Michael Peirce)
  3273. Date: Tue, 7 Jun 94 15:06:31 PST
  3274. Organization: Peirce Software, Inc.
  3275.  
  3276.  
  3277. In article <1994May31.211440.1@west.cscwc.pima.edu> (comp.sys.mac.programmer), 103t_english@west.cscwc.pima.edu writes:
  3278. > Will GX ship with 7.5 or later?
  3279.  
  3280. QuickDraw GX swill ship with 7.5.  Before then, GX can be licensed
  3281. by third party companies that want to include it with their products.
  3282.  
  3283. Since our Peirce Print Tools won't work without GX, we are in the
  3284. process of licensing GX and will bundle it in with our product
  3285. in a week (or two or three depending on how long it takes Apple licensing
  3286. to process the paperwork!).  It's four HDFD disks and will work with
  3287. System 7.1 or later.
  3288.  
  3289. __ Michael Peirce        __ peirce@outpost.sf-bay.org
  3290. __ Peirce Software, Inc. __ 719 Hibiscus Place, Suite 301
  3291. __                       __ San Jose, California USA 95117-1844
  3292. __ Makers of: Smoothie & __ voice: +1.408.244.6554 fax: +1.408.244.6882
  3293. __    Peirce Print Tools __ AppleLink: peirce & AOL: AFC Peirce
  3294.  
  3295. +++++++++++++++++++++++++++
  3296.  
  3297. >From ldo@waikato.ac.nz (Lawrence D'Oliveiro, Waikato University)
  3298. Date: 9 Jun 94 11:39:00 +1200
  3299. Organization: University of Waikato, Hamilton, New Zealand
  3300.  
  3301. In article <CNjbKKKX.1idl0m@outpost.SF-Bay.org>, peirce@outpost.SF-Bay.org (Michael Peirce) writes:
  3302. >
  3303. > In article <1994Jun7.114651.29344@waikato.ac.nz> (comp.sys.mac.programmer), ldo@waikato.ac.nz (Lawrence D'Oliveiro, Waikato University) writes:
  3304. >> In article <CNjbKKKX.1a1ha8@outpost.SF-Bay.org>, peirce@outpost.SF-Bay.org (Michael Peirce) writes:
  3305. >>
  3306. >> > What I'd like to see is a way to peer inside.  Make it 100%
  3307. >> > clear that things will change and all that, but allow us to
  3308. >> > debug things in a reasonable way!
  3309. >>
  3310. >> There are some GX functions that provide such an escape, eg GXGetShapeStructure.
  3311. >
  3312. > GXGetShapeStructure will return geometry information about a shape.
  3313. > Other calls can also return infomation about other stuff like inks
  3314. > and transforms.
  3315. >
  3316. > With these it is possible to build some sort of debugging library
  3317. > yourself, but it really doesn't help much when you are stepping through
  3318. > source code and need to see what the ink of a given shape is or maybe
  3319. > its transform.
  3320.  
  3321. You could write a MacsBug dcmd or two to make these calls. Since GX is
  3322. supposed to be interrupt-reentrant, they might even work quite safely.
  3323.  
  3324. > GraphicsBug [is] completely unusable by folks who don't have a friendly event
  3325. > loop handly.  People who write print drivers or extensions or even App
  3326. > code that uses GX for just a little work, then cleans up before idle
  3327. > time are left in a lurch.
  3328.  
  3329. Here's the tip that was given out at the GX in QD apps and debugging tips
  3330. session at WWDC: break into MacsBug, switch to the system heap zone, then type
  3331. "g InitEventLoop" (I think that's how it's spelt). This is supposed to get you
  3332. into a dummy event loop so you can use GraphicsBug on your driver/extension.
  3333.  
  3334. By the way, I think this only works with the debugging version of GX. MacsBug
  3335. can't seem to find a symbol resembling this in the 1.0f2c13 (non-debugging)
  3336. version I'm running.
  3337.  
  3338. Lawrence D'Oliveiro                       fone: +64-7-856-2889
  3339. Info & Tech Services Division              fax: +64-7-838-4066
  3340. University of Waikato            electric mail: ldo@waikato.ac.nz
  3341. Hamilton, New Zealand    37^ 47' 26" S, 175^ 19' 7" E, GMT+12:00
  3342.  
  3343. +++++++++++++++++++++++++++
  3344.  
  3345. >From peirce@outpost.SF-Bay.org (Michael Peirce)
  3346. Date: Wed, 8 Jun 94 21:52:09 PST
  3347. Organization: Peirce Software, Inc.
  3348.  
  3349.  
  3350. In article <1994Jun9.113900.29449@waikato.ac.nz> (comp.sys.mac.programmer), ldo@waikato.ac.nz (Lawrence D'Oliveiro, Waikato University) writes:
  3351. > Here's the tip that was given out at the GX in QD apps and debugging tips
  3352. > session at WWDC: break into MacsBug, switch to the system heap zone, then type
  3353. > "g InitEventLoop" (I think that's how it's spelt). This is supposed to get you
  3354. > into a dummy event loop so you can use GraphicsBug on your driver/extension.
  3355. > By the way, I think this only works with the debugging version of GX. MacsBug
  3356. > can't seem to find a symbol resembling this in the 1.0f2c13 (non-debugging)
  3357. > version I'm running.
  3358.  
  3359. Right, but who uses Macsbug?  Seriously. I guess the GX team does.
  3360.  
  3361. Yikes!
  3362.  
  3363. __ Michael Peirce        __ peirce@outpost.sf-bay.org
  3364. __ Peirce Software, Inc. __ 719 Hibiscus Place, Suite 301
  3365. __                       __ San Jose, California USA 95117-1844
  3366. __ Makers of: Smoothie & __ voice: +1.408.244.6554 fax: +1.408.244.6882
  3367. __    Peirce Print Tools __ AppleLink: peirce & AOL: AFC Peirce
  3368.  
  3369. +++++++++++++++++++++++++++
  3370.  
  3371. >From quinn@cs.uwa.edu.au (Quinn "The Eskimo!")
  3372. Date: Mon, 13 Jun 1994 09:56:34 +0800
  3373. Organization: Department of Computer Science, The University of Western Australia
  3374.  
  3375. In article <1994Jun3.094115.17117@cm.cf.ac.uk>, Ralph Martin
  3376. <Ralph.Martin@cm.cf.ac.uk> wrote:
  3377.  
  3378. >Seriously, you are probably right about QuickDraw GX having a better
  3379. >model underlying it. I'm not so sure that the realisation of that model
  3380. >into an API is a great leap forward though. Perhaps longer examples would
  3381. >be more convincing!
  3382.  
  3383. The important point is not whether GX is simpler, it's that you can do
  3384. more.  Colour QuickDraw is fine until you hit one of its boundaries and
  3385. then you suffer much pain and misery trying to work around it.  With GX
  3386. the boundaries are much further out, thus you're less likely to hit them. 
  3387. The classic example here is rotated text.
  3388.  
  3389. Hmm, of course when you do hit GX's boundaries...
  3390. -- 
  3391. Quinn "The Eskimo!"      <quinn@cs.uwa.edu.au>     "Support HAVOC!"
  3392. Department of Computer Science, The University of Western Australia
  3393.   Who, as a Mac user as well as a programmer, can't wait for GX drawing/DTP.
  3394.   And is glad he doesn't have to write it (:
  3395.  
  3396. ---------------------------
  3397.  
  3398. >From tboucher@teleport.com (Tyson B. Boucher)
  3399. Subject: [Q] Programming the AT&T 3210?
  3400. Date: Thu, 09 Jun 1994 03:15:16 -0800
  3401. Organization: Teleport - Portland's Public Access (503) 220-1016
  3402.  
  3403.     Does anyone know of a cheap/free way to learn how to program the 3210
  3404. (the DSP in av Macs)?  IÕd like to take advantage of it, but IÕm still
  3405. working on getting a full set of IM, so I donÕt want to spend a lot buying
  3406. a manual from AT&T if I can help it.  Besides, this is (for now) just a
  3407. casual interest and I donÕt want to toss a lot of $$$ after this if it
  3408. turns out to be not worth it.
  3409.  
  3410. -- 
  3411. |          tboucher@teleport.com           |
  3412. |                   /-Student              |
  3413. |  Tyson B. Boucher-|-Programmer           |
  3414. |                   \-lifeless.net.bum  ;) |
  3415.  
  3416. +++++++++++++++++++++++++++
  3417.  
  3418. >From Darrin Cardani <Darrin.Cardani@AtlantaGA.NCR.COM>
  3419. Date: Fri, 10 Jun 1994 13:55:13 GMT
  3420. Organization: AT&T Global Information Solutions, Atlanta
  3421.  
  3422. >In article <tboucher-090694031516@ip-ca.teleport.com> Tyson B. Boucher writes: 
  3423. >    Does anyone know of a cheap/free way to learn how to program the 3210
  3424. >(the DSP in av Macs)?  IÕd like to take advantage of it, but IÕm still
  3425. >working on getting a full set of IM, so I donÕt want to spend a lot buying
  3426. >a manual from AT&T if I can help it.  Besides, this is (for now) just a
  3427. >casual interest and I donÕt want to toss a lot of $$$ after this if it
  3428. >turns out to be not worth it.
  3429.  
  3430. First off, most readers don't recognize the funky characters you've got in
  3431. your post. You might want to use standard ascii when posting.
  3432.  
  3433. But to answer your question, The manual for the language is free from AT&T.
  3434. I don't have the address with me right now.
  3435.  
  3436. The commercially available development system is $1000. Some people on the
  3437. net are trying to write one that I assume will be ftp'able from the major mac
  3438. archive sites. There is a group called comp.dsp. You might want to check it
  3439. out and ask for the Mac DSP mini-faq. It has more info. (like the phone number
  3440. for the free manual.)
  3441.  
  3442. Darrin
  3443.  
  3444.  
  3445.  
  3446.  
  3447.  
  3448.  
  3449.  
  3450. +++++++++++++++++++++++++++
  3451.  
  3452. >From qmot@cs.mcgill.ca (Thomas PUSHPATHADAM)
  3453. Date: 11 Jun 1994 21:19:10 GMT
  3454. Organization: SOCS, McGill University, Montreal, Canada
  3455.  
  3456. (*** Note:  posting from borrowed account ***)
  3457.  
  3458. > Does anyone know of a cheap/free way to learn how to program the 3210
  3459. > (the DSP in av Macs)?  IUd like to take advantage of it, but IUm
  3460. > still
  3461. > working on getting a full set of IM, so I donUt want to spend a lot
  3462. > buying
  3463. > a manual from AT&T if I can help it.  Besides, this is (for now) just
  3464. > a casual interest and I donUt want to toss a lot of $$$ after this if
  3465. > it turns out to be not worth it.
  3466.  
  3467. Stefan Arentz (arentz@batcave.knoware.nl), Andrew Grignon
  3468. (Andrew-Grignon@uiowa.edu) and myself (Paul Lalonde,
  3469. paul@architecture.mcgill.ca) are currently writing an assembler for the
  3470. DSP3210.  Since we're doing this in our scarce spare time, it's moving
  3471. rather slowly.  We want to upload to the major ftp sites by the end of
  3472. June.
  3473.  
  3474. In the meantime, you might call AT&T and ask for the "DSP3210
  3475. information manual".  It's free, and it introduces you to the DSP's
  3476. instruction set.  Their number is 1-800-372-2447.
  3477.  
  3478. You will also need the "Centris  660AV & Quadra 840AV developer note",
  3479. available on more recent Bookmark & developer CDs.  This documents the 
  3480. interface to the DSP.
  3481.  
  3482. Hope this helps,
  3483.  
  3484. Paul Lalonde
  3485. paul@architecture.mcgill.ca
  3486.  
  3487.  
  3488. +++++++++++++++++++++++++++
  3489.  
  3490. >From amanda@intercon.com (Amanda Walker)
  3491. Date: Mon, 13 Jun 1994 14:32:50 -0500
  3492. Organization: InterCon Systems Corporation, Herndon, VA  USA
  3493.  
  3494. Darrin Cardani <Darrin.Cardani@AtlantaGA.NCR.COM> writes:
  3495. > The commercially available development system is $1000. 
  3496.  
  3497. Spectral Innovations is now selling the ARTA development for $495 without 
  3498. support ($995 includes support).  I wouldn't advise doing this unless you've
  3499. done DSP code before, though :)...
  3500.  
  3501.  
  3502. Amanda Walker
  3503. InterCon Systems Corporation
  3504.  
  3505.  
  3506.  
  3507. ---------------------------
  3508.  
  3509. End of C.S.M.P. Digest
  3510. **********************
  3511.  
  3512.  
  3513.  
  3514.